为什么一定要在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_DEPRECATEDE_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);