提问人:Bdloul 提问时间:2/21/2017 最后编辑:JaapBdloul 更新时间:2/22/2017 访问量:111
为什么你必须在error_reporting中进行二进制运算?
Why do you have to do a binary operation in error_reporting?
问:
这听起来像是一个愚蠢的问题,但我对error_reporting有一些不明白的地方,我无法在 php.net 或在谷歌上研究后找到解释。
我的本地工作站错误是这样的:
error_reporting(E_ALL - E_DEPRECATED - E_WARNING);
工作中的其他人都是:
error_reporting(E_ALL & ~E_DEPRECATED & ~E_WARNING);
我的问题是:为什么它给出相同的结果?为什么你必须使用二进制运算而不是简单的减法?
先谢谢你。
答:
0赞
Philipp
2/22/2017
#1
因为设置了完全不同的位,并且您从所有位中减去它们。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);
评论
&
E_ALL - E_WARNING - E_WARNING
E_ALL & ~E_WARNING & ~E_WARNING