¿Excepción o no excepción? Esa es la cuestión
En PHP (y en cualquier lenguaje moderno), las excepciones son una herramienta poderosa para manejar errores. Pero, ¿cuándo corresponde usarlas y cuándo es mejor evitarlas? Si alguna vez te encontraste dudando, este post es para vos.
Vamos directo al grano:
Te dejo una tabla con casos típicos y una respuesta clara: SI (lanza excepción) o NO (no lances excepción).
| Caso | ¿Lanzar excepción? | Explicación breve |
|---|---|---|
| Error de conexión a la base de datos | SI | La aplicación no puede continuar sin la base de datos. |
| Archivo de configuración faltante requerido para iniciar la app | SI | Es esencial para el funcionamiento, debe detenerse. |
| Intentar dividir por cero | SI | Es un error matemático, nunca debe permitirse. |
| Acceso a un índice inexistente en un array | SI | Es un error de programación, debe corregirse. |
| Error de autenticación por token inválido | SI | El usuario no está autorizado, se debe notificar. |
| Violación de restricción de clave única en la base de datos | SI | Es un error de integridad, debe manejarse como excepción. |
| Llamada a un método inexistente en un objeto | SI | Error de programación, debe corregirse. |
| Parámetro obligatorio ausente en una función | SI | No se puede continuar sin el parámetro. |
| Archivo subido supera el tamaño máximo permitido | SI | No se puede procesar el archivo, se debe notificar. |
| Error de sintaxis en una consulta SQL | SI | Error de programación, debe corregirse. |
| Consulta a la base de datos retorna lista vacía | NO | Es un resultado válido, simplemente no hay datos. |
| Usuario no encontrado al buscar por ID | NO | Puede ser un caso esperado, se retorna null o similar. |
| Campo opcional no presente en la petición | NO | Es opcional, no es un error. |
| El usuario intenta eliminar un registro que ya no existe | NO | Operación idempotente, no es error. |
| El usuario solicita una página vacía en paginación | NO | Se retorna lista vacía, no es error. |
| El usuario sube un archivo con extensión no permitida | NO | Se rechaza la carga, pero no es excepción, solo respuesta. |
| El usuario intenta acceder a un recurso sin permisos suficientes | SI | Es un error de autorización, debe lanzarse excepción. |
| El usuario intenta modificar un recurso bloqueado | SI | No está permitido, debe lanzarse excepción. |
| El sistema recibe un tipo de dato incorrecto en una API pública | SI | Error de validación, debe lanzarse excepción. |
| El usuario solicita un recurso con un identificador mal formado | SI | Error de validación, debe lanzarse excepción. |
¿Por qué es importante?
Lanzar excepciones en los casos correctos te ayuda a:
- Mantener tu código limpio y predecible.
- Evitar bugs difíciles de rastrear.
- Mejorar la experiencia del usuario (sí, ¡aunque no lo vean!).
Pero abusar de las excepciones (o usarlas donde no corresponde) puede hacer tu código más difícil de mantener y menos eficiente.
Ejemplo práctico en PHP
function getUserById(int $id): ?User {
$user = UserRepository::find($id);
if (!$user) {
// NO lanzamos excepción, simplemente devolvemos null
return null;
}
return $user;
}
function dividir($a, $b) {
if ($b === 0) {
throw new Exception("No se puede dividir por cero");
}
return $a / $b;
}
Resumiendo
- Excepción: Cuando el flujo normal de la aplicación no puede continuar o hay un error grave.
- NO excepción: Cuando el caso es esperado y la app puede seguir funcionando normalmente.
¿Te sirvió la tabla? ¿Agregarías algún caso más? ¡Comentá abajo y compartí tu experiencia usando excepciones en PHP!