为什么一定要在error_reporting中进行二元运算呢?
Why do you have to do a binary operation in error_reporting?
这听起来像是一个愚蠢的问题,但我对 error_reporting 有一些不明白的地方,我无法在 php.net 上找到解释,或者在对 [=25= 进行研究后].
我的本地工作站错误是这样的:
error_reporting(E_ALL - E_DEPRECATED - E_WARNING);
工作中的其他人是:
error_reporting(E_ALL & ~E_DEPRECATED & ~E_WARNING);
我的问题是:为什么会给出相同的结果?为什么你必须使用二元运算而不是简单的减法?
提前致谢。
因为 E_DEPRECATED
和 E_WARNING
设置了完全不同的位,并且您从 E_ALL
中减去它们,所有位都已设置。
如果您尝试删除两次相同的位集或组合的位集,就会出现真正的区别。在这种情况下,您将多次删除 'bits',这会导致完全错误的值。
一般来说,您可能只是从错误标志中删除一个选项而不知道当前设置了哪些位
$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);
这听起来像是一个愚蠢的问题,但我对 error_reporting 有一些不明白的地方,我无法在 php.net 上找到解释,或者在对 [=25= 进行研究后].
我的本地工作站错误是这样的:
error_reporting(E_ALL - E_DEPRECATED - E_WARNING);
工作中的其他人是:
error_reporting(E_ALL & ~E_DEPRECATED & ~E_WARNING);
我的问题是:为什么会给出相同的结果?为什么你必须使用二元运算而不是简单的减法?
提前致谢。
因为 E_DEPRECATED
和 E_WARNING
设置了完全不同的位,并且您从 E_ALL
中减去它们,所有位都已设置。
如果您尝试删除两次相同的位集或组合的位集,就会出现真正的区别。在这种情况下,您将多次删除 'bits',这会导致完全错误的值。
一般来说,您可能只是从错误标志中删除一个选项而不知道当前设置了哪些位
$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);