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:
<!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>
¿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.