3 min de lectura

¿Que es una excepción?

Una excepción es un evento que ocurre durante la ejecución de un programa y requiere de la ejecución controlada de un bloque de código fuera del flujo de normal de ejecución.

El manejo de excepciones es una herramienta muy potente a la hora de realizar una gestión de una situacion. Lo primero que hay que comprender es que una excepción no es un error. Es una situación que se experimenta un bloque de código y que este no es capaz de manejar.

¿Cuando lanzo una excepción y cuando un error?

Depende un poco de la política del proyecto, en el que estés trabajando, y los gustos de cada programador. Como con los nombres de las variables, lo mejor es llegar a una especie de estandar dentro de cada equipo. En general si estamos trabajando en una clase de alto nivel de una aplicación y muy acoplada con la misma, la mejor opción puede ser informar del error, mediante la gestión de errores de la propia aplicación, y tratar de controlarlo en este mismo lugar. Si por el contrario estamos trabajando en una clase de bajo nivel, desacoplada de la aplicación en la que estás trabajando y susceptible de ser reutilizada, lo mejor es lanzar una excepción y dejar que las clases de arriba traten de capturarlo, para informar al usuario.

Excepciones

PHP 5 tiene un modelo de excepciones similar al de otros lenguajes de programación. Una excepción puede ser lanzada (thrown), y atrapada (“catched”) dentro de PHP. El código puede estar dentro de un bloque try, para facilitar la captura de excepciones potenciales. Cada bloque try debe tener al menos un bloque catch correspondiente. Se pueden usar múltiples bloques catch para atrapar diferentes clases de excepciones. La ejecución normal (cuando no es lanzada ninguna excepción dentro del bloque try, o cuando un bloque catch que coincide con la clase de la excepción lanzada no está presente) continuará después del último bloque catch definido en la sencuencia. Las excepciones pueden ser lanzadas (o relanzadas) dentro de un bloque catch.

Cuando una excepción es lanzada, 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, se emitirá un Error Fatal de PHP con un mensaje “Uncaught Exception …” (“Excepción No Capturada”), a menos que se haya definido un gestor con set_exception_handler().

En PHP 5.5 y posteriores, se puede utilizar un bloque finally después de los bloques catch. El código de dentro del bloque finally siempre se ejecutará después de los bloques try y catch, independientemente de que se haya lanzado una excepción o no, y antes de que el flujo normal de ejecución continúe.

El objeto lanzado debe ser una instancia de la clase Exception o de una subclase de Exception. Intentar lanzar un objeto que no lo es resultará en un Error Fatal de PHP.

Lanzar una Excepcion

<?php
function inverso($x) {
if (!$x) {
throw new Exception('División por cero.');
}
return 1/$x;
}

try {
echo inverso(5) . "\n";
echo inverso(0) . "\n";
} catch (Exception $e) {
echo 'Excepción capturada: ',  $e->getMessage(), "\n";
}

// Continuar la ejecución
echo 'Hola Mundo\n';
?>

Compartir

DEJA UNA RESPUESTA

Please enter your comment!
Please enter your name here