PHP 8.1.0 RC 4 available for testing

restore_error_handler

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

restore_error_handlerBir önceki hata eylemcisini devreye sokar

Açıklama

restore_error_handler(): bool

set_error_handler() ile hata eylemcisini değiştirdikten sonra önceki hata eylemcisini (yerleşik veya kullanıcı tanımlı bir işlev) devreye sokmak için kullanılır.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Bu işlev daima true döndürür.

Örnekler

Örnek 1 - restore_error_handler() örneği

unserialize() bir hataya sebep olsun, böylece özgün hata eylemcisini devreye sokalım.

<?php
function unserialize_handler($errno$errstr)
{
    echo 
"Dizgeleştirilmiş değer geçersiz.\n";
}

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

Yukarıdaki örneğin çıktısı:

Dizgeleştirilmiş değer geçersiz.

Ayrıca Bakınız

add a note add a note

User Contributed Notes 4 notes

up
25
edgarinvillegas at hotmail dot com
13 years ago
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)
?>
up
0
masterada at gmail dot com
4 years ago
Calling restore_error_handler from within an error handler might result in unexpected behaviour:

<?php
error_reporting
(0);

set_error_handler('handleError1');
trigger_error('1-stack:h1');

set_error_handler('handleError2');
trigger_error('2-stack:h1,h2');

trigger_error('6-stack:h1,h2');
trigger_error('7-stack:h1,h2');

function
handleError1($code, $message, $file = '', $line = 0, $context = array())
{
    echo 
__METHOD__ . ' ' . $message . PHP_EOL;
}

function
handleError2($code, $message, $file = '', $line = 0, $context = array())
{
   
trigger_error('3-DEFAULT'); // This will use the php's default error handler

   
echo  __METHOD__ . ' ' . $message . PHP_EOL;

   
set_error_handler('handleError3');
   
trigger_error('4-stack:h1,h2,h3');

   
restore_error_handler(); // This will restore the handleError1 instead of the default error handler
   
trigger_error('5-DEFAULT');
}

function
handleError3($code, $message, $file = '', $line = 0, $context = array())
{
    echo 
__METHOD__ . ' ' . $message . PHP_EOL;
}

?>

The above code will output:

handleError1 1-stack:h1
handleError2 2-stack:h1,h2
handleError3 4-stack:h1,h2,h3
handleError1 5-DEFAULT
handleError1 6-stack:h1,h2
handleError1 7-stack:h1,h2

The following workaround can be used:

<?php

error_reporting
(0);

set_error_handler('handleError1');
trigger_error('1-stack:h1');

set_error_handler('handleError2');
trigger_error('2-stack:h1,h2');

trigger_error('6-stack:h1,h2');
trigger_error('7-stack:h1,h2');

function
handleError1($code, $message, $file = '', $line = 0, $context = array())
{
    echo
__METHOD__ . ' ' . $message . PHP_EOL;
}

function
handleError2($code, $message, $file = '', $line = 0, $context = [])
{
   
restore_error_handler(); // This will restore the previous error handler
   
set_error_handler('count', 0); // Set a dummy method for error handling, it will never be called because $error_type = 0
   
try
    {
       
trigger_error('3-DEFAULT');

        echo
__METHOD__ . ' ' . $message . PHP_EOL;

       
set_error_handler('handleError3');
       
trigger_error('4-stack:h1,h2,h3');

       
restore_error_handler();
       
trigger_error('5-DEFAULT');
    }
    finally
    {
       
restore_error_handler(); // Restore the previous error handler
       
set_error_handler('handleError2'); // Set the current error handler again
   
}
}

function
handleError3($code, $message, $file = '', $line = 0, $context = [])
{
    echo
__METHOD__ . ' ' . $message . PHP_EOL;
}
?>

which will output:

handleError1 1-stack:h1
handleError2 2-stack:h1,h2
handleError3 4-stack:h1,h2,h3
handleError2 6-stack:h1,h2
handleError3 4-stack:h1,h2,h3
handleError2 7-stack:h1,h2
handleError3 4-stack:h1,h2,h3
up
0
lsole at maresme dot net
17 years ago
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!
up
-1
TiMESPLiNTER
6 years ago
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');

?>
To Top