Detener función desde excepción [PHP]

¡Hola!


Llevo un buen rato buscando soluciones y no he conseguido encontrar nada, a ver si pueden ayudarme.


Básicamente quiero que al realizar una excepción, detener la ejecución de esa función (Pero NO del script), lo ilustro con un ejemplo:

public function mostrarMail($mail){
    try{
        if($mail == "") throw new Exception("Ha llamado a la función sin introducir ningún email");
        echo $email
    }catch(Exception $e){
        CapturarEnLog();
    }
}
//Más código

Esto no es más que un simple ejemplo de una serie de funciones mucho más complejas, pero sirve para ilustrar lo que quiero explicar.


Lo que quiero es que, una vez salta la excepción, poder detener de alguna manera la ejecución de esa función, pero NO del script. Es decir, si el usuario en este caso pasa un email vacío, lanzaría la excepción, pero no quiero que imprima $mail, pero sí quiero que siga ejecutándose el resto del código.


Con esto me refiero a que no me sirve llamar a exit() o die(), ya que detendría por completo el script. He buscado y he visto que la única manera de detener una función es llamando a return, pero desde el catch no puedo hacerlo, y como PHP a diferencia de otros lenguajes no tiene un finally, pues no puedo hacerlo.


La única manera que se me ha ocurrido es hacer un booleano que en caso de que se lance la excepción se ponga a true, y después de esto hacer un return para detener el script, una cosa así:

public function mostrarMail($mail){
    try{
        $finally = false;
        if($mail == "") throw new Exception("Ha llamado a la función sin introducir ningún email");
        if($finally) return;
        echo $email;
    }catch(Exception $e){
        CapturarEnLog();
        $finally = true;
    }
}
//Más código

Pero me parece una solución algo "cutre" y debido a que el código real es mucho más complicado, me obligaría a realizar muchísimos cambios para poder gestionar esto, por lo que mi pregunta es ¿Existe alguna otra manera?


Gracias por adelantado.

Añade tu respuesta

Haz clic para o