Menu
Coddy logo textTech

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.

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 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 nueva Exception con 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 divide o multiply)
  • Segunda línea: Un número (ejemplo: 5 o 0 o 2.5)

Salida esperada:

  • Si la operación tiene éxito: Result: seguido del valor calculado, luego Operation completed en una nueva línea
  • Si ocurre una división por cero: Error: Cannot divide by zero, luego Operation completed en 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 try tiene é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

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