什么是E_ALL点| E_STRICT如果是相同的值,E_ALL?(What's the

2019-09-01 23:45发布

  • 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)来获得同样的事情?

Answer 1:

你要:

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之前



Answer 2:

1 | 1 = 1

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

编辑:你似乎拉错值这些常量,使整个问题毫无意义。



Answer 3:

从php.net:

在价值传递-1将显示每一个可能的错误,甚至当一个新的水平和常量在未来的PHP版本中加入。 该E_ALL常数也表现这种方式,因为PHP 5.4的。



Answer 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);



文章来源: What's the point of E_ALL | E_STRICT if it's the same value as E_ALL?