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.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilRecibirá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:
100o49.99) - Segunda línea: Un entero que representa el porcentaje de descuento (ejemplo:
20o150)
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
?>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
1Funciones avanzadas
Funciones anónimasClosures y 'use'Funciones de flechaFunciones callbackUso de 'call_user_func'Funciones variablesPaso por referenciaFunciones recursivasResumen: Miscelánea de funciones4Arreglos multidimensionales
Crear un arreglo 2DAcceder a elementos de un arreglo 2DModificar elementos de un arreglo 2DIterar con bucles anidadosArreglos asociativos 2DResumen: Ejercicio de cuadrícula simple2Manipulación avanzada de arrays
Agregar con 'array_push'Eliminar con 'array_pop'Agregar con 'array_unshift'Eliminar con 'array_shift'Fusionar arrays indexadosFusionar arrays asociativosExtraer con 'array_slice'Valores con 'in_array'Claves con 'array_search'Resumen: Ejercicio de Playlist5Registro de Calificaciones
Configuración del Proyecto: Estructura de DatosAgregar un Nuevo EstudianteAgregar una Calificación a un EstudianteCalcular el Promedio del EstudianteEncontrar al Mejor EstudianteGenerar un Reporte de Calificaciones8Manejo de errores y excepciones
Entendiendo los errores de PHPEl bloque 'try...catch'El bloque 'finally'Lanzar una excepciónCrear una excepción personalizadaUsar una excepción personalizadaResumen: Validación de entradas3Ordenar Arrays
Ordenar arrays indexados de forma ascendenteOrdenar arrays indexados de forma descendenteOrdenar arrays asociativos por valorOrdenar arrays asociativos por claveOrdenación por orden naturalOrdenación personalizada con 'usort'Resumen: Ordenar tablas de clasificación