如果没有在PHP中声明类,为什么不会出现“new”抛出错误?

时间:2016-04-04 11:52:02

标签: php oop

让我们有两个文件: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在创建不存在的新类时不会抛出任何错误?

1 个答案:

答案 0 :(得分:6)

当您尝试实例化当前未加载且无法自动加载的类时, 会抛出致命错误。对您的情况最可能的解释是,您已声明并包含在某个地方的TS类,但它不是您期望的类Foo

事实上,Foo调用应该在require达到之前先死掉。您new中有另一个class Foo