Какой смысл E_ALL | E_STRICT, если это то же значение, что и E_ALL? - PullRequest
11 голосов
/ 28 октября 2009
  • 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 ]

19 голосов
/ 28 октября 2009

Вы хотите:

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 ранее

3 голосов
/ 28 октября 2009

1 | 1 = 1

Самый простой возможный ответ заключается в том, что в настоящее время нет причин объединять эти два с побитовой операцией или операцией, но если они когда-нибудь решат изменить эти константы в будущем, то это может быть.

Изменить: и вы, кажется, вывели неправильные значения для этих констант, что делает вопрос спорным.

1 голос
/ 15 августа 2013

с php.net:

Передача значения -1 покажет каждую возможную ошибку, даже если в будущих версиях PHP будут добавлены новые уровни и константы. Константа E_ALL также ведет себя так же, как в PHP 5.4.

0 голосов
/ 08 декабря 2018

Значения битов, приведенные в вопросе, обычно не являются неправильными, но только для версий PHP старше 5.4.

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

...