由于我的测试服务器更新为PHP 5.3.3(Debian Squeeze),我在PHP中遇到了关于错误报告的奇怪行为。
我设置了这样的error_reporting:
error_reporting(E_ALL);
并通过
检查设置echo error_reporting();
回应30719
。根据{{3}},这意味着“所有错误和警告,除了E_STRICT级别之外都支持。”。
但是在下一行(类定义abstract class formInputContainer extends formContainer implements formElementValueable { ... }
)中,这会产生以下消息:
严格(2048):formInputContainer :: addElement()的声明应该与formContainer :: addElement()的声明兼容
为什么E_STRICT消息虽然未设置但仍会回显?甚至改为E_ALL& ~E_STRICT没有帮助。
答案 0 :(得分:5)
即使它们没有设置,你看到它们的原因是它们是在编译时抛出的(好吧,解析时间)。这意味着在您error_reporting()
来电之前会触发错误。真正的解决方法是更改php.ini
设置以从定义中删除E_STRICT
。要确保您正在编辑正确的文件,请检查phpinfo()
。
答案 1 :(得分:4)
如果这是自定义错误处理程序(通过set_error_handler()
设置),则您必须自行检查当前的error_reporting
级别。自定义错误处理程序会收到所有错误消息:
manual说:
重要的是要记住,对于error_types指定的错误类型,标准PHP错误处理程序是完全被绕过的,除非回调函数返回FALSE。
error_reporting()
设置无效,您的错误处理程序将被调用 - 但您仍然可以读取error_reporting的当前值并采取相应的行动。