(PHP 5, PHP 7, PHP 8)
set_exception_handler — Define una función de usuario para gestionar excepciones
set_exception_handler() define el manejador de excepciones
por defecto si una excepción no es capturada con un bloque
de prueba/atrapa. La ejecución se detendrá después de la llamada a la
función callback.
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. Por lo tanto, llamada desde dentro de un gestor, set_exception_handler() indica que no hay ningún gestor previamente definido.
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 que restore_exception_handler() llamada desde dentro de un gestor reinstala el gestor que se está ejecutando actualmente en lugar del 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. En cuanto el gestor llama a set_exception_handler() o a restore_exception_handler(), esta restauración automática se omite y el gestor activo es el que el propio gestor haya dejado instalado.
Por lo tanto, se desaconseja modificar el gestor de excepciones desde dentro de sí mismo.
callbackLa función a llamar cuando ocurre una excepción no capturada. Esta función de gestión debe aceptar un argumento, que será el objeto Throwable que fue lanzado. Las clases Error y Exception implementan la interfaz Throwable. Esta es la firma del manejador:
null puede ser pasado en su lugar, para reinicializar este manejador
a su estado inicial.
Retorna el manejador previamente definido o null en caso de error.
Si ningún manejador fue previamente definido, null es también
retornado.
| Versión | Descripción |
|---|---|
| 8.3.5 | El gestor de excepciones que va a ser invocado ahora se apila en la pila de gestores y se reinstala una vez que retorna, a menos que el propio gestor haya modificado la pila. |
| 8.3.0 | El gestor de excepciones activo ahora se desactiva mientras se ejecuta, por lo que set_exception_handler() llamada desde dentro de un gestor indica que no hay ningún gestor previamente definido. |
Ejemplo #1 Ejemplo con set_exception_handler()
<?php
function exception_handler(Throwable $exception) {
echo "Excepción no capturada: " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Excepción no capturada');
echo "No ejecutado\n";
?>