2017-02-21 2 views
0

Это может показаться глупым вопросом, но я ничего не понимаю об ошибке_reporting, и я не мог найти объяснения на php.net или после исследования Google.Зачем вам нужно выполнять двоичную операцию в error_reporting?

Моя локальная ошибка рабочей станции заключается в следующем:

error_reporting (E_ALL - E_DEPRECATED - E_WARNING);

Все остальные на работе:

error_reporting (E_ALL & ~ E_DEPRECATED & ~ E_WARNING);

Вопрос: почему он дает тот же результат? И почему вы должны использовать двоичную операцию, а не простое выражение?

Благодарим вас заблаговременно.

+0

У меня есть ощущение того, что они эквивалентны в этом случае это просто шанс. Если это битовые флаги, я ожидаю, что он будет использовать '&'. – Carcigenicate

+0

* двоичные * операции являются обычными для * двоичных * флагов. также, для справки: попробуйте сравнить E_ALL - E_WARNING - E_WARNING' с 'E_ALL & ~ E_WARNING & ~ E_WARNING' –

ответ

0

Поскольку у E_DEPRECATED и E_WARNING установлены совершенно разные биты, и вы их вычитаете из E_ALL, были установлены все биты.

Настоящая разница возникает, если вы попытаетесь удалить два раза один и тот же набор бит или комбинированные биты. В этом случае вы удаляете «биты» более одного раза, что приводит к совершенно неправильным значениям.

В общем, вы, вероятно, просто удалить один вариант из флагов ошибок и не знаете, какие биты в настоящее время установлено

$level = error_reporting(); 
// at this point, you simply can't use simple math, as you don't know, if the given error reporting option is set or not 
$level = $level & ~E_WARNING; 
error_reporting($level); 
Смежные вопросы