Relanzar excepciones

Dentro de un bloque try podemos incluir más bloques try-catch. Como hemos comentado anteriormente también podemos relanzar excepciones, es decir, estando dentro de un bloque catch después de capturar una excepción, podemos volver a lanzar un excepción y que sea capturada por un bloque catch externo.

Veamos un ejemplo:

<?php
$email = "someoneexample.com";
$patron = "/^[a-z0-9]+([\.]?[a-z0-9_-]+)*@[a-z0-9]+([\.-]+[a-z0-9]+)*\.[a-z]{2,}$/";

try
{
   try {
      if (!preg_match($patron, $email))
         throw new Exception($email,1);
      if (strpos($email, "example") !== FALSE)
         throw new EmailException ($email,2);

   }
   catch(Exception $e) {
      //relanzamos la excepcion
      throw new EmailException($email, $e->getCode());
   }
   //si llego aquí es que el email es correcto
   echo "Llego";
}
catch (EmailException $e) {
   echo $e;
}
?>

Vamos a probar con varios ejemplos. Se ha omitido la definición de la excepción porque se propone como ejercicio.

Si a la variable $email le damos el valor "someoneexample.com" obtenemos:

Excepción 1 : someoneexample.com no es una cuenta de E-Mail válida.

Para este ejemplo, se lanza la excepción **Exception** porque el email no cumple el patrón requerido y dentro del primero bloque catch se relanza la excepción EmailException que es capturada por el bloque catch exterior.

Si a la variable $email le damos el valor "[email protected]" obtendríamos:

Excepción 2 : dominio no permitido

Para este segundo valor, se lanza una excepción EmailException porque el email cumple el patrón pero no queremos que tenga ese dominio. Es capturado por el bloque catch exterior.

Por último, si damos un valor correcto a la variable $email, por ejemplo "[email protected]" obtendríamos:

Llego

Al llegar a ese punto de ejecución aseguramos que se cumplen las restricciones de acceso al mismo que son: que el email sea correcto y que el dominio no sea "example.com". Lo importante que debemos destacar es que cuando se produce un error saltamos a otra zona de ejecución para asegurarnos que no producen errores en cadena. Esta es una de las grandes funcionalidades que nos proporcionan las excepciones.

results matching ""

    No results matching ""