因此,当我在PHP中查看phpinfo()
时,我的error_reporting
被设置为某个数字,表示所有错误常量值的总和,对吧?
让我们说,我在.htaccess中意外地将error_reporting
的值设置为某个奇怪的值,例如:
(**E_AL** & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED)
- 拼写错误会发生什么,是否会设置为某个默认值?还是从php.ini?我尝试设置上面的所有值,并且它们都在Local Value
中设置,没有任何问题
我很好奇其他任何价值会发生什么,它会默认为php.ini还是什么?
谢谢!
答案 0 :(得分:1)
PHP使用按位运算符来确定是否应该报告错误级别..所以无论你的整数值是二进制,它都会按位&查看是否报告了错误。
E.g。 如果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 = False,因此不会报告错误。
这些二进制文件中的每一个都可以转换为base10,01 = 1,10 = 2,100 = 4等。
因此,如果您对使用随机整数报告哪些错误感到好奇,可以这样做:
PHP解析器中的 int & E_WARNING
,如果为True,则会显示错误,如果为FALSE则错误将被忽略。
这是一个很好的习惯,因为它在实现对应用程序的日志记录时非常有用,你可以使用相同的系统,因此你不必实现一个长开关或者如果.. elseif .. block根据配置确定是否应记录日志级别。
/**
* 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);
}
所以阈值将是你的配置中的二进制数(它使用常数来提高可读性)然后它就是bitwises&针对提供的返回True或False的日志类型,以确定是否按名称$name
将消息记录到记录器...更加优化。