2017-02-21 100 views
0

这可能听起来像一个愚蠢的问题,但有一些我不明白关于error_reporting,我无法找到关于php.net或在谷歌研究后的解释。为什么你必须在error_reporting中执行二进制操作?

我的本地工作站的错误是这样的:

的error_reporting(E_ALL - E_DEPRECATED - E_WARNING);

每个人在工作中别人是:

的error_reporting(E_ALL &〜E_DEPRECATED &〜E_WARNING);

我的问题是:为什么它会给出相同的结果?为什么你必须使用二元运算而不是简单的减法运算?

预先感谢您。

+0

我有一种感觉的事实,他们在这种情况下,相当于只是偶然。如果这些是位标志,我希望它使用'&'。 – Carcigenicate

+0

* binary *操作习惯用于* binary *标志。另外,以供参考:尝试比较'E_ALL - E_WARNING - E_WARNING'与'E_ALL&〜E_WARNING&〜E_WARNING' –

回答

0

因为E_DEPRECATEDE_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); 
相关问题