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) 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章