E_ALL的重点是什么? E_STRICT如果它与E_ALL的值相同?

时间:2009-10-28 16:04:41

标签: php error-reporting

  • 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)的重点是什么?

4 个答案:

答案 0 :(得分:19)

你想:

error_reporting(E_ALL | E_STRICT);

E_ALL不包含E_STRICT(除非您使用的是PHP 5.4+)。你的价值观不正确。来自Predefined Constants E_ALL的定义为:

  

支持的所有错误和警告,   除了PHP 5.4之前的级别E_STRICT

     PHP 5.4.x中的<327> 32767,PHP 5.3.x中的30719,   PHP 5.2.x中的6143,之前的2047

答案 1 :(得分:3)

1 | 1 = 1

最简单的答案是,目前没有理由将这两者与按位或操作结合起来,但如果他们决定在将来改变这些常量,那么可能会有。

编辑:你似乎已经为这些常量提取了错误的值,使整个问题没有实际意义。

答案 2 :(得分:1)

来自php.net:

传入值-1将显示每个可能的错误,即使在将来的PHP版本中添加了新的级别和常量时也是如此。从PHP 5.4开始,E_ALL常量也表现为这种方式。

答案 3 :(得分:0)

问题中提供的位值通常不是错误的,仅适用于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中的值不同。

5.0之前的PHP

E_STRICT不存在,因此您必须使用:error_reporting(E_ALL);