Нужно ли вам включать файл класса при типе, намекающем на класс в PHP?

Если у меня есть класс Foo и функция bar

function bar (Foo $x) { baz($x); }

который использует Foo в качестве подсказки типа... нужно ли мне включать файл, содержащий Foo, чтобы вышеприведенное скомпилировалось?

В тесте с PHP 5.4.33 включение класса не требовалось даже при вызове функции. Функция не удалась, так как предоставленный $x не был типа Foo, но не возникло ошибки, такой как "Ошибка: Foo не определен".

Надежно ли такое поведение? Это где-нибудь задокументировано?

В качестве примечания я знаю, что для документации было бы полезно включить файл Foo.php, когда я использую Foo в качестве подсказки типа, но это предотвращает вызов require_once, если мне не нужно его включать.


person Chris Middleton    schedule 18.05.2015    source источник
comment
Вот почему многие люди используют автозагрузчики   -  person Mark Baker    schedule 18.05.2015


Ответы (2)


Это не авторитетный ответ.

Я могу себе представить, что объекты PHP внутри имеют поле, в котором хранится имя класса. Это можно использовать для проверки аргументов.

В случае, когда объект является действительным экземпляром Foo (и вы хотите его использовать), вам уже потребуется определение Foo, иначе вы не сможете создать экземпляр.

Таким образом, похоже, что проверка аргумента не нуждается в определении Foo.

person Halcyon    schedule 18.05.2015

Все, что делает PHP, — это проверяет имя типа. Он не связывает его с какой-либо конкретной реализацией. Таким образом, никоим образом не требуется иметь доступ к конкретной реализации этого типа; это означает, что вам не нужно include файл, определяющий тип.

person deceze♦    schedule 18.05.2015