E_STRICT消息虽然未设置但仍被抛出

时间:2011-01-14 15:59:29

标签: php error-reporting

由于我的测试服务器更新为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没有帮助。

2 个答案:

答案 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的当前值并采取相应的行动。