E_NOTICE:仅报告未定义的变量

时间:2014-11-16 20:53:47

标签: php error-reporting e-notices

我希望在使用未定义的变量时看到一个错误,但是避免看到其他E_NOTICE错误会很好,是否可能?

1 个答案:

答案 0 :(得分:2)

正式我建议不要这样做,因为很有可能编写不产生警告或通知的PHP代码。确实,这应该是你的目标 - 消除所有通知和警告。

但是,您可以通过set_error_handler()使用PHP的自定义错误处理来实现您所要求的,它接受在发出错误时运行的回调函数。

您将在错误字符串undefined index回调参数中定义函数以对undefined variable$errstr进行字符串匹配。然后,您实际上会覆盖PHP的正常错误报告系统,并替换您自己的错误报告系统。我想重申,我不认为这是一个很好的解决方案。

$error_handler = function($errno, $errstr, $errfile, $errline) {
  if (in_array($errno, array(E_NOTICE, E_USER_NOTICE))) {
    // Match substrings "undefined index" or "undefined variable"
    // case-insensitively. This is *not* internationalized.
    if (stripos($errstr, 'undefined index') !== false || stripos($errstr, 'undefined variable') !== false) {
       // Your targeted error - print it how you prefer
       echo "In file $errfile, Line $errline: $errstr";
    }
  }
};

// Set the callback as your error handler
// Apply it only to E_NOTICE using the second parameter $error_types
// so that PHP handles other errors in its normal way.
set_error_handler($error_handler, E_NOTICE);

注意:上述其他英语不能自动移植。但如果只是出于自己的目的或限制使用,那可能不是问题。