有人可以解释error_reporting(E_ALL);
和error_reporting(E_ALL & ~E_NOTICE);
之间的差异吗?
我注意到,当我从E_ALL
更改为E_ALL & ~E_NOTICE
时,我遇到的错误消失了。
答案 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
还有其他选项,例如“或”打开标志,或“异或”将标志更改为相反状态。基本上,这就是标志的工作方式。