restore_exception_handler

(PHP 5, PHP 7, PHP 8)

restore_exception_handler Restores the previously defined exception handler function

Опис

function restore_exception_handler(): true

Used after changing the exception handler function using set_exception_handler(), to revert to the previous exception handler (which could be the built-in or a user defined function).

Зауваження:

While an exception handler is running, no exception handler is active: as of PHP 8.3.0 the engine unsets it before invoking it, so that an exception thrown by the handler is not passed back to it.

As of PHP 8.3.5 the engine also pushes the handler it is about to invoke onto the handler stack. A restore_exception_handler() call made from within an exception handler therefore pops that entry and re-installs the handler that is currently running; a second call is needed to install the handler that was active before it.

The running handler is re-installed automatically when it returns, but only if no exception handler is active at that point: a handler that calls set_exception_handler() or restore_exception_handler() is left in charge of the handler stack itself.

Параметри

У цієї функції немає параметрів.

Значення, що повертаються

Завжди повертає true.

Журнал змін

Версія Опис
8.3.5 The exception handler being invoked is now pushed onto the handler stack, so restore_exception_handler() called from within an exception handler re-installs the handler that is currently running; restoring the handler that was active before it now requires two calls.
8.3.0 The active exception handler is now unset while it runs.

Приклади

Приклад #1 restore_exception_handler() example

<?php
    function exception_handler_1(Exception $e)
    {
        echo '[' . __FUNCTION__ . '] ' . $e->getMessage();
    }

    function exception_handler_2(Exception $e)
    {
        echo '[' . __FUNCTION__ . '] ' . $e->getMessage();
    }

    set_exception_handler('exception_handler_1');
    set_exception_handler('exception_handler_2');

    restore_exception_handler();

    throw new Exception('This triggers the first exception handler...');
?>

Поданий вище приклад виведе:

[exception_handler_1] This triggers the first exception handler...

Прогляньте також

add a note

User Contributed Notes 1 note

up
13
rl7 at shinyblue dot net
12 years ago
Note that this does not work within an exception handler.

e.g. 

<?php

function handler1(Exception $e) {
    echo "handler1\n";
    restore_exception_handler();
    throw $e;
}
function handler2(Exception $e) {
    echo "handler2\n";
}

set_exception_handler( 'handler2' );
set_exception_handler( 'handler1' );

throw new Exception( 'might expect to see handler1, handler2' );

/* Outputs:
handler1
PHP Fatal error:  Uncaught exception 'Exception' with message 'might expect to see handler1, handler2' in /tmp/demo.php:15
Stack trace:
#0 {main}
  thrown in /tmp/demo.php on line 15
*/

?>