Excepciones definidas por el usuario

Como hemos comentado anteriormente, lo recomendable es definir nuevas excepciones personalizadas, heredando de la clase Exception. De esta manera podremos añadir funcionalidad a su tratamiento por ejemplo a la hora de mostrarlas, o guardar el mensaje de error en el log del servidor, o enviando un correo electrónico al administrador si es un error grave, etc.

Si generamos con throw una excepción propia esta será capturada por el primer bloque catch que la capture de forma específica ignorando cualquier otro menos un bloque catch que capture la superclase Exception que las captura todas.

Por tanto pondremos antes la captura de las excepciones específicas y luego las generales.

A continuación vemos un ejemplo de una clase definida por nosotros

class MyException extends Exception
{
   public function __construct($message, $code = 0) {
      //código de nuestro propio constructor
      //constructor padre para dar valor a message y code
      parent::__construct($message, $code);
   }
   //reemplazamos el método __toString
   function __toString() {
      return 'Excepción ' . $e->getCode() . ': ' . $e->getMessage() .
         ' en la línea ' . $e->getLine() . ' del fichero ' .
      $e->getFile() . '<br />';
   }
}

Si nuestro constructor realiza algo especial, es recomendable llamar al padre para dar valor a los atributos **message**y **code** heredados de la clase **Exception**.

Ejemplo

<?php
class BDException extends Exception
{
   public function __toString()
   {
      return '<table border><tr><td>'
         . '<strong>EXCEPCION PERSONALIZADA '
         . $this->getCode()
         . '</strong>: '. $this->getMessage().'<br />'.' en '
         . $this->getFile(). ' línea '. $this->getLine()
         . '</td><br />';
    }
}
try
{
  if (mysql_connect('localhost', 'user', '123456', 'libreria')===false)
    throw new BDException('ERROR DE CONEXIÓN', 41);
  else
    throw new Exception('ERROR GENERAL', 42);
}
catch (BDException $bde) //primero los bloques de excepciones propias
{
  echo $bde;
}
catch (Exception $e) //finalmente el bloque de la clase exception
{
  echo $e;
}

?>

El crear clases personalizadas nos permitiría crear una librería de excepciones propias y luego usarlas en cualquiera de nuestros proyectos.

results matching ""

    No results matching ""