PHP E_STRICT和__autoload()

时间:2009-11-11 16:17:46

标签: php error-handling

我正在使用__autoload(),它看起来像这样:

function __autoload($class_name) {
  require_once($class_name . '.class.php');
}

当错误报告为E_ALL时,它可以正常工作。该类已加载,脚本运行时没有错误。

当错误报告为E_ALL | E_STRICT时,没有页面可用,我只是得到:

"Fatal error: Class 'NameOfClass' not found in \path\to\current\script on line 0"

为什么呢?使用__autoload()时这是预期的行为还是我的脚本有问题?

3 个答案:

答案 0 :(得分:2)

问题是我使用自定义错误处理程序将所有错误转换为异常。

在STRICT模式下,autoload包含的类给出了有关代码使用的轻微错误。但这变成了例外。

autoload忽略异常,以便下一个自动加载(如果已注册多个)可以尝试加载该类。

因此,我的类文件中的错误从未显示过,但是阻止了该类的存在,从而在第0行问题上给出了神秘的错误。

禁用我的自定义错误处理程序意味着PHP打印了一个错误(我可以看到)而不是抛出异常(由自动加载抑制),然后我可以看到问题的真正原因并修复它。

答案 1 :(得分:1)

好吧,如果你包含一个文件,并且你的类仍然没有加载 - 显然它会抛出一个错误。

答案 2 :(得分:0)

也许您可以尝试使用spl_autoload_register。我已经在E_STRICT环境中使用它而没有错误..虽然从技术上来说你写的也应该可以正常工作