如果我有课程Foo
和函数bar
function bar (Foo $x) { baz($x); }
使用Foo
作为类型提示...我是否需要包含包含Foo
的文件才能编译上述内容?
在PHP 5.4.33的测试中,即使调用该函数,也不需要包括该类。该函数失败,因为提供的$x
不是类型Foo
,但没有错误,例如"错误:Foo未定义"发生。
这种行为是否可靠?是否记录在哪里?
作为旁注,我知道当我使用Foo.php
作为类型提示时,文档包含Foo
文件可能会有好处,但它确实阻止了对require_once
如果我不必包含它。{/ p>
答案 0 :(得分:4)
所有PHP都检查该类型的名称。它没有将它与任何具体实现联系起来。因此,不要求以任何方式访问该类型的具体实施;这意味着您不需要include
定义类型的文件。
答案 1 :(得分:1)
这不是权威回应。
我可以想象PHP对象内部有一个存储类名的字段。这可以用于参数检查。
如果对象 是Foo
的有效实例(并且您想要使用它),那么您将需要Foo
的定义,否则您可以'做一个实例。
所以看起来参数检查不需要Foo
的定义。