如何使PHP未定义的常量注意到错误

时间:2011-07-05 23:34:47

标签: php constants

我花了好几个小时试图调试由以下代码引起的内存不足错误:

for ($i = 1; i <= 4; $i++) {
  $allowed[] = $type.'_'.$i;
}

哪种PHP好好进入:

for ($i = 1; 'i' <= 4; $i++) {
  $allowed[] = $type.'_'.$i;
}

这导致无限循环,最终由于附加到阵列而导致内存不足错误。 PHP会生成一个通知级别的错误,我可以更改我的错误报告级别来显示这些,但我正在开发第三方应用程序,这种应用程序倾向于产生足够的这些,这不是真正可行的解决方案。

有没有办法捕获这些非常简单的错误?具有讽刺意味的是,如果您执行类似constant('i')的操作并明确询问值,它将生成警告而不是通知,这种行为将是理想的。

2 个答案:

答案 0 :(得分:4)

您可以创建自定义错误功能,然后过滤掉最常见的错误,并仅报告不太常见的错误。然后在PHP中提高错误报告级别。 E.g。

function customError($error_no, $error_message, $error_file, $error_line, $error_context) {
    $common_errors = Array('File not found', 'Another made up error', 'Its late');
    if (! in_array($error_message, $common_errors)) {
        // throw exception, log to file, or other action
    }
}

set_error_handler("customError");

你也可以像这样过滤错误:

  • 过滤掉所有错误,除非它们是 通过测试感兴趣的文件 $error_file对阵数组 您维护的文件

  • 更好(不是生产 server)获取last_modified $error_file的日期/时间 filemtime()并报告错误 它在过去10年内发生了变化 分钟。这可以帮助您调试代码 你写的

  • 或者如果它在一个框架内 你的听起来像是,分手了 $error_file的路径并测试是否 它在你的模块/视图/控制器中 文件,而不是核心框架 文件

答案 1 :(得分:1)

在PHP 7.2中,此通知已更改为警告。

在PHP 8.0中,这将是一个错误。