php - 自定义错误处理程序函数中的error_level和error_message来自何处以及如何出现?

标签 php error-handling runtime-error custom-errors custom-error-handling

我正在从 w3school的PHP教程中学习PHP。

“PHP错误处理”一章中,我正在研究创建自定义错误处理程序

我遇到了以下程序,其中定义了自定义错误处理函数。请参见下面的代码。

<?php
  //error handler function
  function customError($errno, $errstr) {
    echo "<b>Error:</b> [$errno] $errstr";
  }

  //set error handler
  set_error_handler("customError");

  //trigger error
  echo($test);
?>

上面的代码输出如下:

错误: [8] undefined variable :测试

我的疑问是,因为我没有在程序中的任何位置指定错误级别和错误消息,然后自定义错误函数从何处以及如何获取错误级别和错误消息?

整个自定义错误处理机制如何在PHP中起作用?

请用简单明了的语言向我解释。您也可以借助其他示例进行解释。实际上,对我来说也更好。

最佳答案

您的自定义处理程序收到的错误级别是PHP的E_ *常量之一。您会找到可能的常量及其值列表here

在您的示例中,使用 undefined variable $test通常会引起PHP通知。因此,您将在自定义处理程序中将值8(即E_NOTICE)作为$errno获得。您无法更改错误消息,因为此错误是由PHP内部生成的。

尝试一下:删除自定义错误处理程序,并查看PHP为您提供的使用 undefined variable 的错误。这正是调用自定义处理程序的级别和消息。

我建议您使用trigger_error()函数(see here)尝试处理程序。这是设置错误级别并自行发送消息的唯一方法。

另请注意,在error_reporting ini设置中设置的内容无关紧要!您的自定义处理程序始终接收所有错误消息,无论级别如何。

请通读上面链接的手册页。

关于php - 自定义错误处理程序函数中的error_level和error_message来自何处以及如何出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41375648/

相关文章:

java - ArrayAdapter.clear() 上的 NPE

javascript - 如何在截止日期过后禁用复选框

php - Mpdf, block 绝对定位不起作用

python - 在 python 中打印 try-exception 中的帮助文本

javascript - Google 表格可安装触发器 : entire function is within try-catch, 但仍然出现错误

php - Laravel : Handle Integrity constraint violation error and return simplified error message

c - 理解使用 malloc 重新分配的困难

dynamic - 为什么在 Rust 中使用动态错误而不是枚举很常见?使用编译时变体不好/不可能吗?

php - "Cannot use Intervention\Image\Facades\Image as Image because the name is already in use"

php - 将 IAM 角色与 PHP SDK 结合使用时出现问题