11
  • 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)同样的事情,那么做有什么意义呢?

4

4 回答 4

19

你要:

error_reporting(E_ALL | E_STRICT);

E_ALL不包括E_STRICT(除非您使用的是 PHP 5.4+)。你的价值观不正确。从预定义常量 E_ALL定义为:

支持的所有错误和警告,E_STRICTPHP 5.4 之前的级别除外。

PHP 5.4.x 中为 32767,PHP 5.3.x 中为 30719,PHP 5.2.x 中为 6143,之前为 2047

于 2009-10-28T16:05:18.883 回答
3

1 | 1 = 1

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

编辑:您似乎为这些常量提取了错误的值,使整个问题变得毫无意义。

于 2009-10-28T16:10:24.550 回答
1

来自 php.net:

传入值 -1 将显示所有可能的错误,即使在未来的 PHP 版本中添加了新的级别和常量。自 PHP 5.4 起,E_ALL 常量也以这种方式运行。

于 2013-08-14T22:59:54.037 回答
1

问题中提供的位值通常没有错误,但仅适用于早于 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);

于 2018-12-08T18:40:47.097 回答