Php 注意:只报告未定义的变量

Php 注意:只报告未定义的变量,php,error-reporting,e-notices,Php,Error Reporting,E Notices,当我使用未定义的变量时,我希望看到一个错误,但最好避免看到其他E_NOTICE错误,可能吗?我正式建议不要这样做,因为很可能编写不生成警告或通知的PHP代码。事实上,这应该是你的目标——消除所有的通知和警告 然而,使用PHP的自定义错误处理via可以实现您的要求,via接受在发出错误时运行的回调函数 您可以在错误字符串$errstr回调参数中定义函数,对未定义索引和未定义变量进行字符串匹配。实际上,您正在重写PHP的正常错误报告系统,并替换您自己的错误报告系统。我要重申,我认为这不是一个很好的解

当我使用未定义的变量时,我希望看到一个错误,但最好避免看到其他E_NOTICE错误,可能吗?

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

然而,使用PHP的自定义错误处理via可以实现您的要求,via接受在发出错误时运行的回调函数

您可以在错误字符串
$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);

注:以上内容不适用于其他英语语言。但是,如果它只是为了您自己的目的或有限的使用,这可能不是问题。

可能有一种过滤掉您不想要的消息的方法。但是,其他通知是否不是您想要修复或能够修复的?您不应该隐藏其他通知。事实上,当我启用E_通知错误时,我的脚本需要几年才能运行,我等待了2分钟,然后停止了它(通常持续10秒…)。我猜这是因为有太多的E_note错误,而php永远不会结束,因为它加载了数千个错误。我的脚本太大了。@sylvain1264如果是这样的话,那么您的代码中肯定还有其他问题需要解决。我建议您在缩小脚本中生成帮助更正通知的部分后,再写一个新问题。关于如何纠正这些特定错误。好吧,我找到了为什么我有这么多E_通知,如果我运行整个脚本,我会收到数百万条通知消息,因为我的数组使用的是像A这样的键,而不是“A”,所以php告诉我我使用了未定义的常量。使用php 5.2.17,这段代码不会编译。我想我不能这样使用函数。我在第一行有一个错误:“解析错误:语法错误,意外的T_函数,期望'”。不过,你写得很快,但有一些错误^^,我可以单独修复。谢谢你的帮助。