文字

restore_error_handler

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

restore_error_handler还原之前的错误处理函数

说明

bool restore_error_handler ( void )

在使用 set_error_handler() 改变错误处理函数之后,此函数可以 用于还原之前的错误处理程序(可以是内置的或者也可以是用户所定义的函数)。

返回值

该函数总是返回 TRUE

范例

Example #1 restore_error_handler() 范例

如果是 unserialize() 导致了一个错误,接下来 会恢复原来的错误处理函数。

<?php
function  unserialize_handler ( $errno $errstr )
{
    echo 
"Invalid serialized value.\n" ;
}

$serialized  'foo' ;
set_error_handler ( 'unserialize_handler' );
$original  unserialize ( $serialized );
restore_error_handler ();
?>

以上例程会输出:

Invalid serialized value.

注释

Note:

如果在 error_handler 函数中调用 restore_error_handler() 则会被忽略。

参见

  • error_reporting() - 设置应该报告何种 PHP 错误
  • set_error_handler() - 设置一个用户定义的错误处理函数
  • restore_exception_handler() - 恢复之前定义过的异常处理函数。
  • trigger_error() - 产生一个用户级别的 error/warning/notice 信息

用户评论:

[#1] TiMESPLiNTER [2015-04-27 10:39:28]

Works also for restoring nested error handlers:

<?php

error_reporting
(E_ALL);

echo 
'<pre>';

set_error_handler(function($errno$errstr$errfile$errline, array $errcontext) {
    echo 
'ErrorHandler 1: ' $errstr PHP_EOL;
});

trigger_error('Error 1');

set_error_handler(function($errno$errstr$errfile$errline, array $errcontext) {
    echo 
'ErrorHandler 2: ' $errstr PHP_EOL;
});

trigger_error('Error 2');

restore_error_handler();

trigger_error('Error 3');

restore_error_handler();

trigger_error('Error 4');

?>

[#2] edgarinvillegas at hotmail dot com [2008-03-28 08:21:15]

Isolde is kind of wrong. The error handlers are stacked with set_error_handler(), and popped with restore_error_handler(). Here i put an example:

<?php
    mysql_connect
("inexistent"); //Generate an error. The actual error handler is set by default

    
function foo1() {echo "<br>Error foo1<br>";}
    function 
foo2() {echo "<br>Error foo2<br>";}
    function 
foo3() {echo "<br>Error foo3<br>";}
    
    
set_error_handler("foo1");    //current error handler: foo1
    
set_error_handler("foo2");    //current error handler: foo2
    
set_error_handler("foo3");    //current error handler: foo3
    
    
mysql_connect("inexistent");    
    
restore_error_handler();        //now, current error handler: foo2
    
mysql_connect("inexistent");     
    
restore_error_handler();        //now, current error handler: foo1
    
mysql_connect("inexistent"); 
    
restore_error_handler();        //now current error handler: default handler
    
mysql_connect("inexistent");
    
restore_error_handler();        //now current error handler: default handler (The stack can't pop more)
?>

[#3] lsole at maresme dot net [2004-03-14 11:57:19]

As the docs say, restore_error_handler() revert to the *previous error handler*... even if it is the same. A bug made me set twice my custom error handler and later when I was calling restore_error_handler() to restore the built-in handler nothing seemed to happen... this puzzled me for a while!

上一篇: 下一篇: