El bloque 'finally'
Parte de la sección Lógica y Flujo del Journey de PHP de Coddy — lección 54 de 68.
A veces necesitas código que se ejecute independientemente de si ocurre una excepción o no. El bloque finally ofrece esta garantía: contiene código que siempre se ejecutará después de que se complete un bloque try...catch, lo que lo hace perfecto para operaciones de limpieza como cerrar archivos o conexiones a bases de datos.
El bloque finally se ejecuta en todos los escenarios: cuando el bloque try tiene éxito sin excepciones, cuando se lanza y se captura una excepción, e incluso cuando se lanza una excepción pero no se captura. Esta fiabilidad lo hace invaluable para asegurar que el código de limpieza importante siempre se ejecute.
<?php
try {
echo "Attempting operation...\n";
// Código que podría lanzar una excepción
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>El bloque finally se ejecuta después de que tanto el bloque try como el catch hayan terminado, proporcionando un lugar consistente para el código de limpieza esencial. Esto asegura que tu script maneje adecuadamente los recursos y mantenga un estado limpio, independientemente de lo que ocurra durante la ejecución.
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 tipo de operación y un número. La primera entrada es una cadena que será "divide" o "multiply". La segunda entrada es un número que se utilizará en la operación.
Lee ambas entradas y crea un bloque try...catch...finally. Dentro del bloque try, verifica el tipo de operación:
- Si la operación es
"divide", verifica si el número es cero. Si es cero, lanza una nuevaExceptioncon el mensaje"Cannot divide by zero". Si el número no es cero, calcula 100 dividido por el número e imprime"Result: "seguido del resultado. - Si la operación es
"multiply", calcula 100 multiplicado por el número e imprime"Result: "seguido del resultado.
En el bloque catch, maneja cualquier excepción imprimiendo "Error: " seguido del mensaje de la excepción utilizando el método getMessage().
En el bloque finally, imprime "Operation completed".
Formato de entrada:
- Primera línea: Una cadena con el tipo de operación (ya sea
divideomultiply) - Segunda línea: Un número (ejemplo:
5o0o2.5)
Salida esperada:
- Si la operación tiene éxito:
Result:seguido del valor calculado, luegoOperation completeden una nueva línea - Si ocurre una división por cero:
Error: Cannot divide by zero, luegoOperation completeden una nueva línea
Hoja de referencia
El bloque finally contiene código que siempre se ejecuta después de que se completa un bloque try...catch, independientemente de si ocurre una excepción. Es perfecto para operaciones de limpieza como cerrar archivos o conexiones a bases de datos.
El bloque finally se ejecuta en todos los escenarios:
- Cuando el bloque
trytiene éxito sin excepciones - Cuando se lanza y se captura una excepción
- Cuando se lanza una excepción pero no se captura
<?php
try {
echo "Attempting operation...\n";
// Código que podría lanzar una excepción
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>El bloque finally se ejecuta después de que tanto el bloque try como el catch hayan finalizado, asegurando que el código de limpieza esencial siempre se ejecute.
Pruébalo tú mismo
<?php
// Leer entradas
$operation = trim(fgets(STDIN));
$number = floatval(fgets(STDIN));
// TODO: Escribe tu código a continuación
// Crea un bloque try...catch...finally para manejar la operación
?>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