Если у меня есть класс Foo
и функция bar
function bar (Foo $x) { baz($x); }
который использует Foo
как подсказка типа … мне нужно включить файл, содержащий Foo
для того, чтобы выше скомпилировать?
В тесте с PHP 5.4.33 включение класса не требовалось даже при вызове функции. Функция не выполнена, так как предоставленная $x
не было типа Foo
, но не возникла ошибка, такая как «Ошибка: Foo не определена».
Надежно ли это поведение? Это где-нибудь задокументировано?
В качестве примечания, я знаю, что для документации было бы полезно включить Foo.php
файл, когда я использую Foo
как подсказка типа, но он предотвращает вызов require_once
если я не должен включать это.
Это не авторитетный ответ.
Я могу себе представить, что внутри PHP-объектов есть поле, в котором хранится имя класса. Это может быть использовано для проверки аргумента.
В случае, когда объект является действительный экземпляр Foo
(и вы хотите использовать его) вам уже понадобится определение Foo
иначе вы не можете сделать экземпляр.
Таким образом, похоже, что проверка аргументов не нуждается в определении Foo
,
Все, что делает PHP — это проверяет название типа. Это не связывает его с какой-либо конкретной реализацией. Таким образом, никоим образом не требуется иметь доступ к конкретной реализации такого типа; то есть вам не нужно include
файл, который определяет тип.