-
E_ALL
等于8191( 0001 1111 1111 1111
) -
E_STRICT
等于2048( 0000 1000 0000 0000
)
使用按位或将它们组合在一起:
1 1111 1111 1111
1000 0000 0000
我们得到的值完全相同的原始E_ALL
:
1 1111 1111 1111
什么是做点error_reporting(E_ALL | E_STRICT)
如果我们可以根本就error_reporting(E_ALL)
来获得同样的事情?
你要:
error_reporting(E_ALL | E_STRICT);
E_ALL
不包括E_STRICT
(除非您使用PHP 5.4+)。 你的价值观是不正确的。 从预定义常量 E_ALL
被定义为:
所有的错误和警告,如支持,除了水平的E_STRICT
之前,PHP 5.4。
32767在PHP 5.4.x版本,30719在PHP 5.3.x,则应在6143 PHP 5.2.x,2047之前
1 | 1 = 1
最简单的答案可能是,有目前没有理由将两个与按位或操作相结合,但如果他们决定在未来改变这些常量,则可能是。
编辑:你似乎拉错值这些常量,使整个问题毫无意义。
从php.net:
在价值传递-1将显示每一个可能的错误,甚至当一个新的水平和常量在未来的PHP版本中加入。 该E_ALL常数也表现这种方式,因为PHP 5.4的。
在问题中提供的位值一般都不是错,但只比5.4老版本PHP。
PHP 5.4+
E_ALL
包含E_STRICT
所以你应该使用: error_reporting(E_ALL);
Binary Name Decimal
0001 1111 1111 1111 E_ALL 32767
0000 1000 0000 0000 E_STRICT 2048
----------------------------------------------------------------------
0001 1111 1111 1111 E_ALL | E_STRICT produces the same result as E_ALL
PHP 5.3
E_ALL
不包括E_STRICT
所以你应该使用: error_reporting(E_ALL | E_STRICT);
Binary Name Decimal
0111 0111 1111 1111 E_ALL 30719
0000 1000 0000 0000 E_STRICT 2048
----------------------------------------------------------------------
0111 1111 1111 1111 E_ALL | E_STRICT produces a different value than E_ALL
PHP 5.0至5.2
E_ALL
不包括E_STRICT
所以你应该使用: error_reporting(E_ALL | E_STRICT);
但位值从PHP 5.3的值不同。
PHP 5.0之前
E_STRICT
不存在,所以你必须使用: error_reporting(E_ALL);