error_reporting(E_ALL) 和 error_reporting(E_ALL & ~E_NOTICE) 有啥区别

Posted

技术标签:

【中文标题】error_reporting(E_ALL) 和 error_reporting(E_ALL & ~E_NOTICE) 有啥区别【英文标题】:What are differences between error_reporting(E_ALL) and error_reporting(E_ALL & ~E_NOTICE)error_reporting(E_ALL) 和 error_reporting(E_ALL & ~E_NOTICE) 有什么区别 【发布时间】:2010-12-13 07:49:49 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以二进制形式显示此内容以获得胜利。【参考方案2】:

E_ALL 是“一切”

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

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

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

【讨论】:

【参考方案3】:

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

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

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

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

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

【讨论】:

以上是关于error_reporting(E_ALL) 和 error_reporting(E_ALL & ~E_NOTICE) 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

PHP error_reporting() 函数

织梦后台打开后空白

PHP调试总结

PHP error_reporting 抑制通知和警告

PHP如何关闭notice级别的错误提示

删除不推荐使用的错误消息