Когда тип намекает на класс в PHP, нужно ли включать файл класса?

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

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

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

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

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

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

1

Решение

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

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

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

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

1

Другие решения

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

4

По вопросам рекламы [email protected]