php-excepciones-en-php

Excepciones en PHP

  • 3 min

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 (normalmente Exception o Error).

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.";
}
Copied!

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 bloques catch para 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();
}
Copied!

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...";
Copied!
  1. --- Iniciando proceso ---
  2. Ha ocurrido un problema: División por cero no permitida. (El echo del resultado dentro del try se saltó).
  3. --- Limpiando memoria y cerrando proceso ---
  4. El script continúa ejecutándose… (El programa no murió fatalmente).