Una excepción es un objeto que señala una situación anómala e interrumpe el flujo normal del programa.
En el desarrollo profesional con PHP, abandonar los die() o exit() y pasar al uso de Excepciones es un salto de calidad fundamental. Una excepción es un objeto que describe un error o un comportamiento inesperado, permitiendo que tu programa “reaccione” y se recupere en lugar de detenerse abruptamente.
El flujo se controla mediante cuatro palabras clave esenciales: try, catch, finally y throw.
throw: lanzando el problema
La palabra clave throw (lanzar) se utiliza para indicar que ha ocurrido un error. Esto detiene la ejecución normal del script en ese punto y busca el primer bloque catch disponible.
Nota: En PHP, solo puedes “lanzar” objetos que sean instancias de la clase
Throwable(normalmenteExceptionoError).
function verificarEdad($edad) {
if ($edad < 18) {
// Aquí "lanzamos" la excepción. El código debajo de esta línea no se ejecuta.
throw new Exception("Debes ser mayor de edad para acceder.");
}
return "Acceso concedido.";
}try y catch: intentar y atrapar
Para manejar una excepción lanzada, envolvemos el código “peligroso” (que podría fallar) dentro de un bloque try. Si ocurre una excepción dentro del try, el control pasa inmediatamente al bloque catch.
try: Define la zona de código a vigilar.catch: Define qué hacer si salta un error específico. Puedes tener múltiples bloquescatchpara diferentes tipos de errores.
try {
// Intentamos ejecutar la función
echo verificarEdad(15);
} catch (Exception $e) {
// Si falla, capturamos el objeto error en la variable $e
// Usamos métodos del objeto Exception como getMessage()
echo "¡Error capturado!: " . $e->getMessage();
}finally: el bloque de limpieza
El bloque finally es opcional, pero muy poderoso. El código dentro de finally se ejecutará siempre, ocurra una excepción o no.
Es ideal para tareas de limpieza, como cerrar conexiones a bases de datos o cerrar archivos abiertos, asegurando que los recursos no queden “colgados”.
Ejemplo completo integrado
Imagina una función que realiza una división. Matemáticamente sabemos que la división por cero es indefinida ().
function dividir($numerador, $denominador) {
if ($denominador === 0) {
throw new Exception("División por cero no permitida.");
}
return $numerador / $denominador;
}
echo "--- Iniciando proceso ---\n";
try {
// 1. Intentamos la operación (esto fallará)
$resultado = dividir(10, 0);
echo "El resultado es: " . $resultado;
} catch (Exception $e) {
// 2. Atrapamos el error
echo "Ha ocurrido un problema: " . $e->getMessage() . "\n";
// Podríamos guardar este error en un log aquí
} finally {
// 3. Esto se ejecuta SIEMPRE, haya error o no
echo "--- Limpiando memoria y cerrando proceso ---\n";
}
echo "El script continúa ejecutándose...";- --- Iniciando proceso ---
- Ha ocurrido un problema: División por cero no permitida. (El
echodel resultado dentro del try se saltó). - --- Limpiando memoria y cerrando proceso ---
- El script continúa ejecutándose… (El programa no murió fatalmente).