restore_exception_handler

(PHP 5, PHP 7, PHP 8)

restore_exception_handler Reactiva la antigua función de gestión de excepciones

Descripción

function restore_exception_handler(): true

restore_exception_handler() se utiliza, después del cambio de la función de gestión de excepciones con la función set_exception_handler(), para volver al antiguo gestor de excepciones (que puede ser la función interna o una función definida por el usuario).

Nota:

Mientras se ejecuta un gestor de excepciones, ningún gestor de excepciones está activo: a partir de PHP 8.3.0 el motor lo desactiva antes de invocarlo, de modo que una excepción lanzada por el gestor no le sea transmitida de nuevo.

A partir de PHP 8.3.5 el motor también apila el gestor que va a invocar en la pila de gestores. Por lo tanto, una llamada a restore_exception_handler() realizada desde dentro de un gestor de excepciones desapila esa entrada y reinstala el gestor que se está ejecutando actualmente; se necesita una segunda llamada para instalar el gestor que estaba activo antes de él.

El gestor en ejecución se reinstala automáticamente cuando retorna, pero solo si en ese momento no hay ningún gestor de excepciones activo: un gestor que llama a set_exception_handler() o a restore_exception_handler() queda a cargo de la pila de gestores.

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

Retorna siempre true.

Historial de cambios

Versión Descripción
8.3.5 El gestor de excepciones que va a ser invocado ahora se apila en la pila de gestores, por lo que restore_exception_handler() llamada desde dentro de un gestor de excepciones reinstala el gestor que se está ejecutando actualmente; restaurar el gestor que estaba activo antes de él ahora requiere dos llamadas.
8.3.0 El gestor de excepciones activo ahora se desactiva mientras se ejecuta.

Ejemplos

Ejemplo #1 Ejemplo con restore_exception_handler()

<?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('Esto utiliza el primer gestor de excepciones...');
?>

El ejemplo anterior mostrará:

[exception_handler_1] Esto utiliza el primer gestor de excepciones...

Véase también

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
*/

?>