为什么你必须在error_reporting中执行二进制操作?
问题描述:
这可能听起来像一个愚蠢的问题,但有一些我不明白关于error_reporting,我无法找到关于php.net或在谷歌研究后的解释。为什么你必须在error_reporting中执行二进制操作?
我的本地工作站的错误是这样的:
的error_reporting(E_ALL - E_DEPRECATED - E_WARNING);
每个人在工作中别人是:
的error_reporting(E_ALL &〜E_DEPRECATED &〜E_WARNING);
我的问题是:为什么它会给出相同的结果?为什么你必须使用二元运算而不是简单的减法运算?
预先感谢您。
答
因为E_DEPRECATED
和E_WARNING
已完全不同的位集,并且你从E_ALL
减去它们,所有位都被设置。
如果尝试删除相同位集或组合位集的两倍,则会出现真正的差异。在这种情况下,您会多次删除“位”,这会导致完全错误的值。
在一般情况下,你可能刚刚从错误标志去掉一个选项,不知道,这位当前设置
$level = error_reporting();
// at this point, you simply can't use simple math, as you don't know, if the given error reporting option is set or not
$level = $level & ~E_WARNING;
error_reporting($level);
我有一种感觉的事实,他们在这种情况下,相当于只是偶然。如果这些是位标志,我希望它使用'&'。 – Carcigenicate
* binary *操作习惯用于* binary *标志。另外,以供参考:尝试比较'E_ALL - E_WARNING - E_WARNING'与'E_ALL&〜E_WARNING&〜E_WARNING' –