restore_exception_handler

(PHP 5, PHP 7, PHP 8)

restore_exception_handler Réactive l'ancienne fonction de gestion d'exceptions

Description

function restore_exception_handler(): true

restore_exception_handler() est utilisé, après le changement de la fonction de gestion d'exceptions avec la fonction set_exception_handler(), pour revenir à l'ancien gestionnaire d'exceptions (qui peut être la fonction interne ou une fonction définie par l'utilisateur).

Note:

Pendant l'exécution d'un gestionnaire d'exceptions, aucun gestionnaire d'exceptions n'est actif : à partir de PHP 8.3.0, le moteur le désactive avant de l'invoquer, afin qu'une exception levée par le gestionnaire ne lui soit pas repassée.

À partir de PHP 8.3.5, le moteur empile également sur la pile des gestionnaires celui qu'il s'apprête à invoquer. Un appel à restore_exception_handler() effectué depuis un gestionnaire d'exceptions dépile donc cette entrée et réinstalle le gestionnaire en cours d'exécution ; un second appel est nécessaire pour installer le gestionnaire qui était actif avant lui.

Le gestionnaire en cours d'exécution est réinstallé automatiquement lorsqu'il retourne, mais uniquement si aucun gestionnaire d'exceptions n'est actif à ce moment-là : un gestionnaire qui appelle set_exception_handler() ou restore_exception_handler() se voit confier la gestion de la pile des gestionnaires.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne toujours true.

Historique

Version Description
8.3.5 Le gestionnaire d'exceptions invoqué est désormais empilé sur la pile des gestionnaires, si bien que restore_exception_handler() appelé depuis un gestionnaire d'exceptions réinstalle le gestionnaire en cours d'exécution ; restaurer le gestionnaire qui était actif avant lui nécessite désormais deux appels.
8.3.0 Le gestionnaire d'exceptions actif est désormais désactivé pendant son exécution.

Exemples

Exemple #1 Exemple avec 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('Ceci utilise le premier gestionnaire d\'exception...');
?>

L'exemple ci-dessus va afficher :

[exception_handler_1] Ceci utilise le premier gestionnaire d'exception...

Voir aussi

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

?>