Menu
Coddy logo textTech

O Bloco 'finally'

Parte da seção Lógica & Fluxo do Journey de PHP da Coddy — lição 54 de 68.

Às vezes, você precisa de código que seja executado independentemente de ocorrer uma exceção ou não. O bloco finally fornece essa garantia - ele contém código que sempre será executado após a conclusão de um bloco try...catch, tornando-o perfeito para operações de limpeza, como fechar arquivos ou conexões de banco de dados.

O bloco finally é executado em todos os cenários: quando o bloco try é bem-sucedido sem exceções, quando uma exceção é lançada e capturada, e mesmo quando uma exceção é lançada, mas não capturada. Essa confiabilidade o torna inestimável para garantir que o código de limpeza importante sempre seja executado.

<?php
try {
    echo "Attempting operation...\n";
    // Código que pode lançar uma exceção
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
} finally {
    echo "Cleanup completed.\n";
}
?>

O bloco finally é executado após a conclusão dos blocos try e catch, fornecendo um local consistente para o código de limpeza essencial. Isso garante que seu script manipule os recursos adequadamente e mantenha um estado limpo, independentemente do que aconteça durante a execução.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Você receberá duas entradas: um tipo de operação e um número. A primeira entrada é uma string que será "divide" ou "multiply". A segunda entrada é um número que será usado na operação.

Leia ambas as entradas e crie um bloco try...catch...finally. Dentro do bloco try, verifique o tipo de operação:

  • Se a operação for "divide", verifique se o número é zero. Se for zero, lance uma nova Exception com a mensagem "Cannot divide by zero". Se o número não for zero, calcule 100 dividido pelo número e imprima "Result: " seguido pelo resultado.
  • Se a operação for "multiply", calcule 100 multiplicado pelo número e imprima "Result: " seguido pelo resultado.

No bloco catch, trate qualquer exceção imprimindo "Error: " seguido pela mensagem da exceção usando o método getMessage().

No bloco finally, imprima "Operation completed".

Formato de entrada:

  • Primeira linha: Uma string com o tipo de operação (divide ou multiply)
  • Segunda linha: Um número (exemplo: 5 ou 0 ou 2.5)

Saída esperada:

  • Se a operação for bem-sucedida: Result: seguido pelo valor calculado, depois Operation completed em uma nova linha
  • Se ocorrer divisão por zero: Error: Cannot divide by zero, depois Operation completed em uma nova linha

Folha de consulta

O bloco finally contém código que sempre é executado após a conclusão de um bloco try...catch, independentemente de ter ocorrido uma exceção. É perfeito para operações de limpeza, como fechar arquivos ou conexões de banco de dados.

O bloco finally é executado em todos os cenários:

  • Quando o bloco try é bem-sucedido sem exceções
  • Quando uma exceção é lançada e capturada
  • Quando uma exceção é lançada, mas não capturada
<?php
try {
    echo "Attempting operation...\n";
    // Code that might throw an exception
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
} finally {
    echo "Cleanup completed.\n";
}
?>

O bloco finally é executado após a conclusão dos blocos try e catch, garantindo que o código de limpeza essencial sempre seja executado.

Experimente você mesmo

<?php
// Lê as entradas
$operation = trim(fgets(STDIN));
$number = floatval(fgets(STDIN));

// TODO: Escreva seu código abaixo
// Crie um bloco try...catch...finally para lidar com a operação

?>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo