Поэтому, когда я в настоящее время вижу phpinfo()
в PHP мой error_reporting
устанавливается на некоторое число, которое представляет собой сумму всех значений констант ошибки, верно?
Допустим, я случайно установил значение error_reporting
в какое-то странное значение случайно в .htaccess, например:
(**E_AL** & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED)
— опечатка в E_ALLЧто произойдет, будет ли установлено какое-то значение по умолчанию? Или из php.ini? Я попытался установить все значения выше, и все они были установлены в Local Value
без проблем.
Мне интересно, что будет с любым другим значением, будет ли оно по умолчанию php.ini или как?
Спасибо!
PHP использует побитовые операторы, чтобы определить, следует ли сообщать об уровне ошибки .. поэтому, независимо от того, является ли ваше целое значение двоичным, оно будет побитовым & чтобы увидеть, если ошибка сообщается.
Например.
если E_DEPRECATED (не говоря, что это точно): 01, E_WARNING — 10, E_NOTICE — 100, используя E_DEPRECATED | E_WARNING | E_NOTICE выдаст двоичный файл 111, таким образом, когда сообщается об ошибке, такой как E_WARNING, он принимает установленное значение и побитовый & Чтобы определить, отображается ли отчет:
111 & 010 = True, поэтому об ошибке будет сообщено.
если вы только что использовали E_DEPRECATED | E_NOTICE, двоичный файл равен 101, поэтому 101 & 010 = Ложь, поэтому об ошибке не сообщается.
Каждый из этих двоичных файлов может быть преобразован в base10, 01 = 1, 10 = 2, 100 = 4 и т. Д.
Так что, если вам интересно, какие ошибки будут сообщаться с вашим случайным целым числом, вы можете сделать:
int & E_WARNING
в вашем синтаксическом анализаторе PHP, если его значение равно True, то будет отображаться ошибка, если значение FALSE, то ошибка будет игнорироваться.
Это хорошее соглашение для изучения, так как оно очень полезно при реализации регистрации в вашем приложении, вы можете использовать ту же систему, и поэтому вам не нужно реализовывать длинный переключатель или блок if .. elseif .., чтобы определить, уровень журнала должен быть зарегистрирован или не в соответствии с конфигурацией.
/**
* Determines whether this message should be logged based on the provided type and the set threshold
* @access protected
* @param int $type
* @param string $name name of the log to check.
* @return boolean
*/
protected function should_log($type,$name='default') {
return (bool) ($this->getConfig($name)->threshold & $type);
}
таким образом, порог будет двоичным числом в вашей конфигурации (который использует константы для читабельности), то он побитовый & для предоставленного типа журнала, который возвращает True или False, чтобы определить, следует ли регистрировать сообщение в регистраторе по имени $name
… гораздо более оптимизирован.
Других решений пока нет …