0

我正在从w3school 的 PHP Tutorial学习 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] 未定义变量:测试

我的疑问是因为我没有在程序的任何地方指定错误级别和错误消息,那么自定义错误函数从哪里以及如何获取错误级别和错误消息?

整个自定义错误处理机制在 PHP 中是如何工作的?

请用简单明了的语言向我解释。您也可以借助其他示例进行解释。事实上,我也理解它会更好。

4

2 回答 2

1

本机错误

PHP 本身或其扩展产生的所有错误都有特定的消息和类型(严重级别,例如 E_NOTICE、E_WARNING、E_ERROR 等)。此参数在源代码中设置。对于您的示例,zend_execute.c

static zend_never_inline ZEND_COLD void zval_undefined_cv(uint32_t var, const zend_execute_data *execute_data)
{
    zend_string *cv = CV_DEF_OF(EX_VAR_TO_NUM(var));

    zend_error(E_NOTICE, "Undefined variable: %s", ZSTR_VAL(cv));
}

自定义错误

trigger_error()您可以通过该函数生成用户级错误。E_USER_*它允许为发出的错误 指定自定义消息和类型之一。

trigger_error("Some message", E_USER_ERROR); 
于 2016-12-29T08:52:54.600 回答
1

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

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

试试看:删除自定义错误处理程序并查看 PHP 为您提供的使用未定义变量的错误。这正是调用自定义处理程序的级别和消息。

我建议您使用该函数尝试您的处理程序trigger_error()请参见此处)。这是自己设置错误级别和消息的唯一方法。

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

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

于 2016-12-29T09:33:41.487 回答