让我们有两个文件:index.php和foo.php foo.php文件将放在子目录/ lib
中现在在index.php中,让我们有这个功能
function bar(){
require('foo.php');
$foo = new Foo();
$foo->bar();
}
在foo.php中
class Foo{
public function __construct(){
echo "baz";
}
public function bar(){
echo "bar";
}
}
现在,错误很难发现:我在要求Foo类时犯了错误,因为require('lib/foo.php')
我只写了require('foo.php')
很难发现这个错误,特别是如果你有很多代码行。
现在应该声明类会引发错误吗?
如果我在$foo = new Foo();
行上出错,则很容易发现错误。在这种情况下,你会得到Fatal error: Call to undefined method Foo::bar()
,这会让你思考:“但我宣布了方法”,你忘了错误就在其他地方。
那么,为什么PHP在创建不存在的新类时不会抛出任何错误?
答案 0 :(得分:6)
当您尝试实例化当前未加载且无法自动加载的类时, 会抛出致命错误。对您的情况最可能的解释是,您做已声明并包含在某个地方的TS
类,但它不是您期望的类Foo
。
事实上,Foo
调用应该在require
达到之前先死掉。您做在new
中有另一个class Foo
。