【发布时间】:2018-04-12 22:22:59
【问题描述】:
为 PHP 系统编写了自定义错误处理程序后,我试图弄清楚如何确定错误报告级别(可以通过 error_reporting() 获得)是否已全局设置为 Off (0) 或已仅使用 @ prefix 禁用该行
目前的问题是,对于这两种情况,error_reporting() 函数都返回 0
更新 #1
不幸的是,这个例子不适用于 CentOS 6.8 上的 PHP 5.3.3,因为 ini_get() 函数返回与 error_reporting() 相同的值
function errhandle($errno, $errstr, $errfile, $errline) {
if (error_reporting() === 0 && error_reporting() === (int)ini_get('error_reporting')) {
echo 'error_reporting(0) was used';
} else if (error_reporting() === 0 && error_reporting() !== (int)ini_get('error_reporting')) {
echo '@ was used';
}
}
set_error_handler('errhandle');
echo error_reporting()."\n";
echo @$arr['name'];
// Prints
22527
error_reporting(0) was used
【问题讨论】:
-
我理解它的用途和目的,但是我想把这个讨论排除在这个问题的范围之外。 dkellner's comment 总结得很好
There is no reason to NOT use something just because "it can be misused". You could as well say "unlink is evil, you can delete files with it so don't ever use unlink". It's a valid point that the @ operator hides all errors - so my rule of thumb is: use it only if you're aware of all possible errors your expression can throw AND you consider all of them irrelevant.
标签: php error-handling error-reporting