Какой смысл 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)
, чтобы получить одно и то же?
Ответы
Ответ 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);