error_reporting(E_ALL)和error_reporting(E_ALL& ~E_NOTICE)之间有什么区别

时间:2009-11-05 07:17:57

标签: php error-reporting

有人可以解释error_reporting(E_ALL);error_reporting(E_ALL & ~E_NOTICE);之间的差异吗?

我注意到,当我从E_ALL更改为E_ALL & ~E_NOTICE时,我遇到的错误消失了。

3 个答案:

答案 0 :(得分:12)

E_ALL是“一切”

E_ALL& ~E_NOTICE是“除通知之外的一切”

通知是最不紧急的消息。但是它们对于捕获愚蠢的程序员错误非常有用,例如尝试从不存在键的哈希读取等等。

(要理解语法,请阅读按位运算符)

答案 1 :(得分:5)

E_ALL应该是所有错误和警告并注意 - 一切

E_NOTICE是一个特殊的错误级别,显示在将来的PHP版本中不会产生错误但不好或将要过时的东西。通知错误级别旨在鼓励最佳实践。

除了通知之外,还应该error_reporting(E_ALL ^ E_NOTICE);报告所有内容。

您在开发过程中建议将错误报告设置为E_ALL并修复所有通知错误。

manual中查看会提供更多详细信息。

答案 2 :(得分:0)

E_ALL是一个标志 E_NOTICE也是一个标志

因此,当您执行〜的按位运算时,您将从E_ALL中排除E_NOTICE

幕后发生的事

十进制

E_ALL = 32767 
E_NOTICE = 8

它们是2的幂

按位

E_ALL    = 111111111111111
E_NOTICE = 000000000001000

NOT的结果将为

111111111110111

然后php可以在内部使用&(AND)运算符检查通知是否打开

111111111110111
000000000001000

1 & 0 = 0表示它已关闭。但是,如果您不使用〜NOT,那么它将是1 & 1 = 1,这意味着该标志为SET

还有其他选项,例如“或”打开标志,或“异或”将标志更改为相反状态。基本上,这就是标志的工作方式。