Menu
Coddy logo textTech

Usar una excepción personalizada

Parte de la sección Lógica y Flujo del Journey de PHP de Coddy — lección 57 de 68.

Ahora que has creado tu propia clase de excepción personalizada, es hora de ponerla en uso práctico. El uso de una excepción personalizada implica dos pasos clave: lanzar tu tipo de excepción específico cuando ocurre un problema, y capturar ese tipo de excepción específico para manejarlo adecuadamente.

Cuando lanzas una excepción personalizada, usas la misma palabra clave throw pero creas una instancia de tu clase personalizada en lugar de la clase genérica Exception. Esto hace que tu manejo de errores sea más preciso y significativo.

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}
?>

El verdadero poder surge al capturar tu excepción personalizada. En lugar de capturar una Exception genérica, puedes capturar tu InvalidEmailException específica. Esto te permite manejar diferentes tipos de errores de diferentes maneras, haciendo que tu manejo de errores sea más específico e informativo.

<?php
try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

Este enfoque te brinda un control preciso sobre el manejo de errores, permitiéndote responder de manera diferente a diversos tipos de problemas en tu aplicación.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

challenge icon

Desafío

Fácil

Recibirás tres entradas: una cadena de nombre de usuario, una cadena de contraseña y un número de longitud mínima de contraseña. El nombre de usuario no debe estar vacío y la contraseña debe cumplir con el requisito de longitud mínima.

Crea una clase de excepción personalizada llamada InvalidCredentialsException que extienda la clase base Exception.

Crea una función llamada validateCredentials que acepte tres parámetros: nombre de usuario, contraseña y longitud mínima. Dentro de esta función:

  • Si el nombre de usuario está vacío (una cadena vacía), lanza una InvalidCredentialsException con el mensaje "Username cannot be empty"
  • Si la longitud de la contraseña es menor que la longitud mínima, lanza una InvalidCredentialsException con el mensaje "Password must be at least X characters long" (donde X es el valor de la longitud mínima)
  • Si ambas validaciones pasan, imprime "Credentials are valid"

Usa un bloque try...catch para llamar a la función con las entradas proporcionadas. En el bloque catch, captura específicamente la InvalidCredentialsException e imprime "Validation error: " seguido del mensaje de la excepción utilizando el método getMessage().

Formato de entrada:

  • Primera línea: Una cadena que representa el nombre de usuario (ejemplo: john_doe o una cadena vacía)
  • Segunda línea: Una cadena que representa la contraseña (ejemplo: pass123)
  • Tercera línea: Un número entero que representa la longitud mínima de la contraseña (ejemplo: 8)

Salida esperada:

  • Si las credenciales son válidas: Credentials are valid
  • Si el nombre de usuario está vacío: Validation error: Username cannot be empty
  • Si la contraseña es demasiado corta: Validation error: Password must be at least X characters long (donde X es la longitud mínima)

Hoja de referencia

Para usar excepciones personalizadas, lanza una instancia de tu clase personalizada y captura ese tipo de excepción específico:

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}

try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

Esto permite un manejo de errores preciso al capturar tipos de excepciones específicos en lugar de objetos Exception genéricos.

Pruébalo tú mismo

<?php
// Leer entrada
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));

// TODO: Escribe tu código a continuación
// 1. Crea la clase InvalidCredentialsException
// 2. Crea la función validateCredentials
// 3. Usa un bloque try...catch para llamar a la función y manejar excepciones

?>
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo