PHP 错误处理 restore_error_handler() 函数


PHP restore_error_handler() 函数用于恢复以前的错误处理程序。

此函数会删除使用 set_error_handler() 设置的任何自定义错误处理程序,恢复了 PHP 以前的错误处理功能。

如果您想停止使用自己的错误处理程序,这非常有用。

调用 restore_error_handler() 时,将使用 set_error_handler() 设置的任何自定义错误处理程序都将被删除,并且在使用 set_error_handler() 之前存在的错误处理程序将再次使用。

语法

以下是 PHP 错误处理 restore_error_handler() 函数的语法 -

bool restore_error_handler()

参数

此函数不接受任何参数。

返回值

restore_error_handler() 函数在成功时返回 True。失败时为 False。

PHP 版本

restore_error_handler() 函数首次在核心 PHP 4.0.1 中引入,在 PHP 5、PHP 7 和 PHP 8 中继续轻松运行。

示例 1

这是 PHP 错误处理 restore_error_handler() 函数的基本示例,该函数在自定义错误处理程序完成其任务后返回前一个错误处理程序。这会阻止后续代码执行维护自定义错误处理程序。


<?php
   function unserialize_handler($errno, $errstr) {
      echo "hello的值无效。\n";
   }

   $hello = 'abc';
   set_error_handler('unserialize_handler');

   $original = unserialize($hello);
   restore_error_handler();
?>

以下是以下代码的结果 -

hello的值无效。

示例 2

该程序演示如何在两个自定义错误处理程序之间切换,在中间恢复默认处理程序,并使用 restore_error_handler() 函数处理转换。


<?php
   // 第一个自定义错误处理程序
   function firstErrorHandler($errno, $errstr) {
      echo "第一处理程序: [$errno] $errstr\n";
   }

   // 第二个自定义错误处理程序
   function secondErrorHandler($errno, $errstr) {
      echo "第二处理程序: [$errno] $errstr\n";
   }

   // 设置第一个错误处理程序
   set_error_handler("firstErrorHandler");

   // 触发错误
   echo $undefined_variable;

   // 还原默认处理程序
   restore_error_handler();
   set_error_handler("secondErrorHandler");

   // 触发另一个错误
   echo $undefined_variable_2;
?> 

这将生成以下输出 -

第一处理程序: [8] Undefined variable: undefined_variable
第二处理程序: [8] Undefined variable: undefined_variable_2

示例 3

现在在下面的代码中,我们将使用 restore_error_handler() 函数,并在自定义错误处理程序的帮助下将错误记录到文件中,并在此之后显示 PHP 默认错误处理程序的恢复。


<?php
   // 自定义错误处理程序
   function loggingErrorHandler($errno, $errstr) {
      error_log("Error [$errno]: $errstr", 3, "errors.log");
      echo "错误记录到文件中。\n";
   }

   // 设置日志错误处理程序
   set_error_handler("loggingErrorHandler");

   // 触发错误
   echo $undefined_variable;

   // 还原默认错误处理程序
   restore_error_handler();

   // 触发另一个错误(由默认处理程序处理)
   echo $another_undefined_variable;
?> 

这将创建以下输出 -

错误记录到文件中。
Notice: Undefined variable: another_undefined_variable in C:\user\WWW\index.php on line 18

示例 4

在以下示例中,我们使用 restore_error_handler() 函数有条件地处理错误,并恢复未处理错误类型的默认处理程序,并展示灵活的错误管理。


<?php
   // 条件自定义错误处理程序
   function conditionalErrorHandler($errno, $errstr) {
      if ($errno === E_NOTICE) {
         echo "已处理通知:$errstr\n";
      } else {
         // 恢复其他错误的默认处理程序
         restore_error_handler();
         trigger_error($errstr, $errno);
      }
   }

   // 设置条件错误处理程序
   set_error_handler("conditionalErrorHandler");

   // 触发通知
   echo $undefined_variable;

   // 触发警告
   trigger_error("这是一个警告!", E_USER_WARNING);  
?> 

以下是上述代码的输出 -

已处理通知:Undefined variable: undefined_variable
Warning: 这是一个警告! in C:\phpStudy20161103\WWW\index.php on line 9