Tema 15

Manejo de Excepciones en PHP (Try...Catch)

Aprende a gestionar errores en tiempo de ejecución de forma controlada y profesional mediante bloques try, catch, finally y el lanzamiento de excepciones con throw.

¿Qué es una Excepción?

Una excepción es un objeto que representa un evento inesperado o una condición de error ocurrida durante la ejecución de un script. A diferencia de los errores fatales clásicos que detienen abruptamente la aplicación, las excepciones pueden ser atrapadas y gestionadas limpiamente.

Estructura Fundamental:

try {
    // Código potencialmente propenso a errores
    if ($divisor === 0) {
        throw new InvalidArgumentException("No se puede dividir entre cero.");
    }
    $resultado = $dividendo / $divisor;
} catch (InvalidArgumentException $e) {
    // Se ejecuta solo si ocurre este tipo exacto de excepción
    echo "Error controlado: " . $e->getMessage();
} catch (Throwable $e) {
    // Atrapa cualquier otro error o excepción imprevista
    echo "Error general: " . $e->getMessage();
} finally {
    // Se ejecuta SIEMPRE, haya ocurrido o no una excepción
    // Ideal para liberar memoria o cerrar conexiones
}

Métodos Útiles del Objeto Excepción ($e):

  • $e->getMessage(): Retorna el mensaje de error legible.
  • $e->getCode(): Retorna el código numérico de error (si fue provisto).
  • $e->getLine(): Retorna el número de línea exacto donde ocurrió el incidente.
  • $e->getTraceAsString(): Retorna la pila de llamadas (stack trace) para depuración.

⚡ Ejemplo de Procesamiento Seguro de Matrícula

Simulación de inscripción a un curso con validación de cupos y control de excepciones con try-catch-finally:

index.html
Solo lectura
<!DOCTYPE html>
<html>
<body>

<h2>Control de Excepciones en PHP 8.3</h2>

<?php
class MatrimonioCuposException extends Exception {}

function inscribirEstudiante(string $nombre, int $edad, int $cuposDisponibles): string {
    // 1. Validación de edad mínima
    if ($edad < 16) {
        throw new InvalidArgumentException("El estudiante '{$nombre}' tiene {$edad} años. La edad mínima es de 16 años.");
    }

    // 2. Validación de disponibilidad de cupos
    if ($cuposDisponibles <= 0) {
        throw new MatrimonioCuposException("No hay cupos disponibles en este momento para la cohorte.");
    }

    return "✅ ¡Inscripción confirmada para <strong>{$nombre}</strong> en Kilopolis Academia!";
}

// Probamos diferentes escenarios
$candidatos = [
    ["nombre" => "Celia Cruz", "edad" => 22, "cupos" => 5],
    ["nombre" => "Pedro Pascal", "edad" => 14, "cupos" => 4],
    ["nombre" => "Selena Quintanilla", "edad" => 25, "cupos" => 0],
];

foreach ($candidatos as $candidato) {
    echo "<div style='border:1px solid #cbd5e1; border-radius:6px; padding:10px 14px; margin-bottom:10px; background:#f8fafc;'>";
    echo "<strong>Evaluando a: {$candidato['nombre']}...</strong><br>";

    try {
        $resultado = inscribirEstudiante(
            $candidato['nombre'], 
            $candidato['edad'], 
            $candidato['cupos']
        );
        echo "<span style='color:#059669;'>{$resultado}</span>";
    } catch (InvalidArgumentException $e) {
        echo "<span style='color:#dc2626;'>⚠️ Error de Validación: " . $e->getMessage() . "</span>";
    } catch (MatrimonioCuposException $e) {
        echo "<span style='color:#d97706;'>⏳ Lista de Espera: " . $e->getMessage() . "</span>";
    } catch (Throwable $e) {
        echo "<span style='color:#991b1b;'>❌ Error Imprevisto: " . $e->getMessage() . "</span>";
    } finally {
        echo "<br><small style='color:#64748b;'>[Operación auditada en el log del sistema]</small>";
    }

    echo "</div>";
}
?>

</body>
</html>
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual Completo de PHP y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.