我正在使用__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()时这是预期的行为还是我的脚本有问题?
答案 0 :(得分:2)
问题是我使用自定义错误处理程序将所有错误转换为异常。
在STRICT模式下,autoload包含的类给出了有关代码使用的轻微错误。但这变成了例外。
autoload忽略异常,以便下一个自动加载(如果已注册多个)可以尝试加载该类。
因此,我的类文件中的错误从未显示过,但是阻止了该类的存在,从而在第0行问题上给出了神秘的错误。
禁用我的自定义错误处理程序意味着PHP打印了一个错误(我可以看到)而不是抛出异常(由自动加载抑制),然后我可以看到问题的真正原因并修复它。
答案 1 :(得分:1)
好吧,如果你包含一个文件,并且你的类仍然没有加载 - 显然它会抛出一个错误。
答案 2 :(得分:0)
也许您可以尝试使用spl_autoload_register。我已经在E_STRICT环境中使用它而没有错误..虽然从技术上来说你写的也应该可以正常工作