#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) о предоставлении информации о версии на страницах обзора / синопсиса класса (и, следовательно, интерфейса). Спасибо, что напомнили мне, что это существует и было бы полезно!