Recolector de excepciones
¿Qué sucede si se produce una excepción y no tenemos ningún bloque **catch ** para tratarla?
Existe una función _callback_ que será llamada para su tratamiento y que podremos redefinir con la función:
string set_exception_handler( callback gestor_excepciones )
Además dispondremos de la función:
bool restore_exception_handler( void )
para recuperar la función de gestión de errores previamente definida.
Esto nos permitirá dar formato a la visualización de excepciones homogéneo con el resto de nuestra aplicación.
Veamos un ejemplo:
<?php
function GestorExcepciones($e) {
echo '<b>Excepción capturada por GestorExcepciones</b>:'
. $e->getMessage().'<br>';
}
//establecemos un manejador de excepciones
set_exception_handler('GestorExcepciones');
throw new Exception('Nueva excepción');
echo "Este codigo no deberia ejecutarse<br />";
?>
Resultado
Excepción capturada por GestorExcepciones: Nueva excepción
Como vemos en el resultado obtenido, la función callback definida para gestionar las excepciones ha sido la que ha capturado el error y ha mostrado el mensaje. Lo interesante es que no necesitamos llamar a funciones que finalizan la ejecución del script como **exit()** o **die()** para finalizar la ejecución del script PHP.
Si comentamos la función que establece el manejador de excepciones, vemos que se lanza la dos mensajes de error siguientes:
Fatal error: Uncaught exception 'Exception' with message 'Nueva
excepción' in C:\wamp\www\sesion09\gestor_excepciones.php on line 9
Exception: Nueva excepción in
C:\wamp\www\sesion09\gestor_excepciones.php on line 10
Tal y como hemos comentado anteriormente, cuando se lanza una excepción, el código siguiente a la declaración no será ejecutado y PHP intentará encontrar el primer bloque catch coincidente. Si una excepción no es capturada, PHP lanzará un Error Fatal con el mensaje **"Uncaught Exception ..."** ("Excepción No Capturada"), a menos que se haya definido un recolector de excepciones con **set_exception_handler()**.