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()**.

results matching ""

    No results matching ""