(PHP 5, PHP 7, PHP 8)
set_exception_handler — Définit une fonction utilisateur de gestion d'exceptions
set_exception_handler() définit le gestionnaire d'exceptions
par défaut si une exception n'est pas attrapée dans un bloc
try/catch. L'exécution sera stoppée après l'appel à la
fonction callback.
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. Appelé depuis un gestionnaire, set_exception_handler() ne signale donc aucun gestionnaire précédemment défini.
À partir de PHP 8.3.5, le moteur empile également sur la pile des gestionnaires celui qu'il s'apprête à invoquer, si bien que restore_exception_handler() appelé depuis un gestionnaire réinstalle le gestionnaire en cours d'exécution plutôt que celui 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à. Dès que le gestionnaire appelle set_exception_handler() ou restore_exception_handler(), cette restauration automatique est ignorée et le gestionnaire actif est celui que le gestionnaire a lui-même laissé en place.
Modifier le gestionnaire d'exceptions depuis lui-même est donc déconseillé.
callbackLa fonction à appeler quand une exception non attrapée se produit. Cette fonction de gestion doit accepter un paramètre, qui sera l'objet Throwable qui a été levé. Les classes Error et Exception implémentent l'interface Throwable. Ceci est la signature du gestionnaire :
null peut être passé à la place, pour ré-initialiser ce gestionnaire
en son statut initial.
Retourne le gestionnaire précédemment défini ou null en cas d'erreur.
Si aucun gestionnaire n'a été précédemment défini, null est également
retourné.
| Version | Description |
|---|---|
| 8.3.5 | Le gestionnaire d'exceptions invoqué est désormais empilé sur la pile des gestionnaires et réinstallé lorsqu'il retourne, sauf si le gestionnaire a lui-même modifié la pile. |
| 8.3.0 | Le gestionnaire d'exceptions actif est désormais désactivé pendant son exécution, si bien que set_exception_handler() appelé depuis un gestionnaire ne signale aucun gestionnaire précédemment défini. |
Exemple #1 Exemple avec set_exception_handler()
<?php
function exception_handler(Throwable $exception) {
echo "Exception non attrapée : " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Uncaught Exception');
echo "Non exécuté\n";
?>