Достаточно предопределенных интерфейсов PHP и проверки SPL-версии?

#php #interface #spl #predefined-variables

#php #интерфейс #spl #предопределенные переменные

Вопрос:

Возможно, это очевидный вопрос, но я хочу быть уверен.

Я пытаюсь выяснить, в какой версии «Предопределенные интерфейсы» появились в PHP. Мое предположение равно 5.0.0, так как именно тогда интерфейсы SPL были добавлены в соответствии с документами.

Кроме того, можно ли их когда-либо отключить с помощью настройки или перекомпиляции, или можно с уверенностью предположить, что проверка версии удовлетворяет их наличию? Почему они вообще отделены от SPL, разница только в том, что их никогда нельзя отключить, в то время как SPL может быть? (по крайней мере, до версии 5.3.0)

Ответ №1:

Вы можете узнать, с какой версии доступен каждый интерфейс SPL здесь. Некоторые из них были добавлены после версии 5.0. И согласно руководству начиная с PHP 5.3.0, SPL нельзя отключить.

Комментарии:

1. Блестяще. Я просматривал этот сайт ранее, но не знал, что там также есть информация о версии. НРАВИТСЯ, что этот раздел документации просто находится в чьем-то домашнем каталоге: p

Ответ №2:

У меня нет лучшего ответа, чем ваши предположения о том, когда были добавлены интерфейсы или в чем отличие (пятиминутное копание в CVS PHP ничего не дало).

Однако существует пуленепробиваемый способ проверить их существование вместо того, чтобы полагаться на проверку версии: interface_exists . Для PHP версий 5.0.0 и 5.0.1 вам придется сделать class_exists вместо этого.

Итак:

 function interfaces_defined() {
    // Most likely case first
    if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
        return true;
    }
    else if (version_compare(PHP_VERSION, '5.0.0', '<')) {
        return false;
    }
    else if (version_compare(PHP_VERSION, '5.0.1', '<=')) {
        return class_exists('Iterator');
    }
    else {
        return interface_exists('Iterator');
    }
}
  

Не самый красивый, но он определенно охватывает все основы.

Комментарии:

1. Я бы проголосовал за ваш комментарий, если бы я просто не потрудился создать учетную запись и у меня не было представителя для этого! Даже если это не такой прямой ответ, как некоторые другие, за точность: D

Ответ №3:

В настоящее время в руководстве отображается информация о версии только для методов, принадлежащих каждому интерфейсу. Информацию об этой версии можно найти в верхней части страницы над прототипом метода (info).

Итак, перейдите к описанию метода (ов) и посмотрите, что там указано.

Можно ли их когда-либо отключить с помощью настройки или перекомпиляции, или можно с уверенностью предположить, что проверка версии удовлетворяет их наличию? Почему они вообще отделены от SPL, разница только в том, что их никогда нельзя отключить, в то время как SPL может быть? (по крайней мере, до версии 5.3.0)

Эти интерфейсы вообще не являются частью расширения SPL, и их нельзя включить или отключить. Они должны были быть реализованы в движке Zend; было бы невозможно делать то, что они делают в расширении, которым является SPL.


Как бы то ни было, некоторое время назад я открыл запрос функции (# 49927) о предоставлении информации о версии на страницах обзора / синопсиса класса (и, следовательно, интерфейса). Спасибо, что напомнили мне, что это существует и было бы полезно!