开发者

What's the point of E_ALL | E_STRICT if it's the same value as E_ALL?

  • E_ALL equals 8191 (0001 1111 1111 1111)
  • E_STRICT equals 2048 (0000 1000 0000 0000)

Using bitwise OR to combine them:

1 1111 1111 1111
  1000 0000 0000
开发者_JAVA百科

We get the exact same value as the original E_ALL:

1 1111 1111 1111

What's the point of doing error_reporting(E_ALL | E_STRICT) if we can simply do error_reporting(E_ALL) to get the same thing?


You want:

error_reporting(E_ALL | E_STRICT);

E_ALL does not include E_STRICT (unless you are using PHP 5.4+). Your values are incorrect. From Predefined Constants E_ALL is defined as:

All errors and warnings, as supported, except of level E_STRICT prior to PHP 5.4.

32767 in PHP 5.4.x, 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously


1 | 1 = 1

The simplest answer possible is that there's presently no reason to combine the two with a bitwise or operation, but if they ever decide to change those constants in the future, then there might be.

Edit: and you seem to have pulled the wrong values for those constants, making the entire question moot.


from php.net:

Passing in the value -1 will show every possible error, even when new levels and constants are added in future PHP versions. The E_ALL constant also behaves this way as of PHP 5.4.


The bit values provided in the question are not generally wrong but only for PHP versions older than 5.4.

PHP 5.4+

E_ALL includes E_STRICT so you should use: 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 does not include E_STRICT so you should use: 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 till 5.2

E_ALL does not include E_STRICT so you should use: error_reporting(E_ALL | E_STRICT); but the bit values differ from the values in PHP 5.3.

PHP before 5.0

E_STRICT does not exist so you must use: error_reporting(E_ALL);

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜