В чем разница между error_reporting(E_ALL) и error_reporting(E_ALL & ~E_NOTICE)

Кто-нибудь может объяснить разницу между error_reporting(E_ALL); и error_reporting(E_ALL & ~E_NOTICE);?

Я заметил, что когда я меняю с E_ALL на E_ALL & ~E_NOTICE, ошибка, которую я хакал, исчезает.


person shin    schedule 05.11.2009    source источник


Ответы (3)


E_ALL это "все"

E_ALL & ~E_NOTICE — это «все, кроме уведомлений».

Уведомления — это наименее срочные сообщения. Но они могут быть очень полезны для отлова глупых ошибок программиста, например, попытки чтения из хэша с несуществующим ключом и т. д.

(Чтобы понять синтаксис, ознакомьтесь с побитовыми операторами)

person timdev    schedule 05.11.2009

E_ALL, если все ошибки и предупреждения и уведомления - все

E_NOTICE — это специальный уровень ошибок, показывающий то, что не вызовет ошибок, но не является хорошим или устареет в будущих версиях PHP. Уровень ошибки уведомления предназначен для поощрения лучших практик.

Также следует error_reporting(E_ALL ^ E_NOTICE); сообщать обо всем, кроме уведомления.

Во время разработки рекомендуется установить отчет об ошибках на E_ALL и исправить все ошибки уведомлений.

просмотр руководства даст гораздо больше деталей.

person RageZ    schedule 05.11.2009

E_ALL — это флаг E_NOTICE — это тоже флаг

поэтому, когда вы выполняете побитовую операцию ~, которая НЕ является, вы исключаете E_NOTICE из E_ALL

Под капотом происходит следующее

в десятичном виде

E_ALL = 32767 
E_NOTICE = 8

они сила 2

побитовый

E_ALL    = 111111111111111
E_NOTICE = 000000000001000

результат НЕ будет

111111111110111

тогда php может внутренне проверить, включены ли уведомления с оператором & (И)

111111111110111
000000000001000

1 & 0 = 0 значит выключено. Однако, если вы не использовали ~ NOT, тогда это будет 1 & 1 = 1, это означает, что флаг установлен.

Существуют и другие варианты, например, ИЛИ для включения флага или XOR для изменения флага в противоположное состояние. По сути, так работают флаги.

person Robert    schedule 28.11.2018