Подтвердить что ты не робот

Какой смысл E_ALL | E_STRICT, если это то же значение, что и E_ALL?

  • 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), чтобы получить одно и то же?

4b9b3361

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

Ответ 2

1 | 1 = 1

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

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

Ответ 3

от php.net:

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

Ответ 4

Значения битов, приведенные в вопросе, не являются неправильными, но только для версий 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);