Menu
Coddy logo textTech

Lanzar una excepción

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

A veces necesitas señalar que algo ha salido mal en tu código y detener la ejecución normal. La palabra clave throw te permite crear y lanzar manualmente una excepción, dándote control sobre cuándo y por qué tu programa debe manejar una condición de error.

Cuando lanzas una excepción, creas un nuevo objeto Exception y le proporcionas un mensaje descriptivo sobre lo que salió mal. Esta excepción detendrá inmediatamente la ejecución del código actual y buscará un bloque catch para manejarla.

<?php
function checkAge($age) {
    if ($age < 0) {
        throw new Exception("Age cannot be negative");
    }
    echo "Age is valid: " . $age;
}

try {
    checkAge(-5);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

La sentencia throw requiere la sintaxis new Exception(), donde pasas un mensaje de cadena que describe el problema. Este mensaje puede recuperarse más tarde utilizando el método getMessage() en tu bloque catch, lo que facilita entender qué salió mal y responder adecuadamente.

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 dos entradas: un número que representa un precio y un número que representa un porcentaje de descuento. Ambas entradas se proporcionarán como números (el precio puede ser un decimal y el porcentaje de descuento será un entero entre 0 y 100).

Lee ambas entradas y crea una función llamada calculateFinalPrice que acepte dos parámetros: el precio y el porcentaje de descuento. Dentro de esta función, verifica si el porcentaje de descuento es mayor que 100 o menor que 0. Si cualquiera de las condiciones es verdadera, lanza una nueva Exception con el mensaje "Invalid discount percentage". Si el descuento es válido, calcula el precio final después de aplicar el descuento y devuélvelo.

Usa un bloque try...catch para llamar a la función con las entradas proporcionadas. En el bloque try, llama a la función e imprime "Final price: " seguido del precio final calculado. En el bloque catch, maneja la excepción imprimiendo "Error: " seguido del mensaje de la excepción utilizando el método getMessage().

Formato de entrada:

  • Primera línea: Un número que representa el precio (ejemplo: 100 o 49.99)
  • Segunda línea: Un entero que representa el porcentaje de descuento (ejemplo: 20 o 150)

Salida esperada:

  • Si el descuento es válido: Final price: seguido del precio calculado después del descuento
  • Si el descuento no es válido: Error: Invalid discount percentage

Hoja de referencia

Utiliza la palabra clave throw para crear y lanzar excepciones manualmente:

throw new Exception("Error message");

Cuando se lanza una excepción, se detiene la ejecución normal y se busca un bloque catch para manejarla:

<?php
function checkAge($age) {
    if ($age < 0) {
        throw new Exception("Age cannot be negative");
    }
    echo "Age is valid: " . $age;
}

try {
    checkAge(-5);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

Utiliza el método getMessage() en el bloque catch para recuperar el mensaje de la excepción.

Pruébalo tú mismo

<?php
// Leer entradas
$price = floatval(fgets(STDIN));
$discountPercentage = intval(fgets(STDIN));

// TODO: Escribe tu código a continuación
// Crea la función calculateFinalPrice
// Usa un bloque try...catch para llamar a la función y manejar excepciones
// Imprime la salida apropiada

?>
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