(PHP 5, PHP 7, PHP 8)
restore_exception_handler — Réactive l'ancienne fonction de gestion d'exceptions
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.
Cette fonction ne contient aucun paramètre.
Retourne toujours true.
| 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. |
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...