8

谁能解释error_reporting(E_ALL);和之间的区别error_reporting(E_ALL & ~E_NOTICE);

我注意到,当我从 更改为 时E_ALLE_ALL & ~E_NOTICE我正在破解的错误消失了。

4

3 回答 3

12

E_ALL 是“一切”

E_ALL & ~E_NOTICE 是“除通知外的所有内容”

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

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

于 2009-11-05T07:26:02.103 回答
5

E_ALL 应该所有的错误和警告和通知 -一切

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

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

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

查看手册会提供更多详细信息。

于 2009-11-05T07:24:58.673 回答
3

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) 运算符在内部检查通知是否为 ON

111111111110111
000000000001000

1 & 0 = 0这意味着它已关闭。但是,如果您没有使用 ~ NOT 那么1 & 1 = 1这意味着该标志已设置

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

于 2018-11-28T16:55:11.860 回答