E_ALL
等于8191(0001 1111 1111 1111
)E_STRICT
等于2048(0000 1000 0000 0000
)使用按位OR组合它们:
1 1111 1111 1111
1000 0000 0000
我们得到完全与原始E_ALL
相同的值:
1 1111 1111 1111
如果我们可以error_reporting(E_ALL | E_STRICT)
做同样的事情,那么error_reporting(E_ALL)
的重点是什么?
答案 0 :(得分:19)
你想:
error_reporting(E_ALL | E_STRICT);
E_ALL
不包含E_STRICT
(除非您使用的是PHP 5.4+)。你的价值观不正确。来自Predefined Constants E_ALL
的定义为:
支持的所有错误和警告, 除了PHP 5.4之前的级别
PHP 5.4.x中的<327> 32767,PHP 5.3.x中的30719, PHP 5.2.x中的6143,之前的2047E_STRICT
。
答案 1 :(得分:3)
1 | 1 = 1
最简单的答案是,目前没有理由将这两者与按位或操作结合起来,但如果他们决定在将来改变这些常量,那么可能会有。
编辑:你似乎已经为这些常量提取了错误的值,使整个问题没有实际意义。
答案 2 :(得分:1)
来自php.net:
传入值-1将显示每个可能的错误,即使在将来的PHP版本中添加了新的级别和常量时也是如此。从PHP 5.4开始,E_ALL常量也表现为这种方式。
答案 3 :(得分:0)
问题中提供的位值通常不是错误的,仅适用于5.4之前的PHP版本。
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
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
E_ALL
不包含E_STRICT
,因此您应该使用:error_reporting(E_ALL | E_STRICT);
,但是位值与PHP 5.3中的值不同。
E_STRICT
不存在,因此您必须使用:error_reporting(E_ALL);