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.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilVocê 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 novaExceptioncom 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 (
divideoumultiply) - Segunda linha: Um número (exemplo:
5ou0ou2.5)
Saída esperada:
- Se a operação for bem-sucedida:
Result:seguido pelo valor calculado, depoisOperation completedem uma nova linha - Se ocorrer divisão por zero:
Error: Cannot divide by zero, depoisOperation completedem 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
?>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
1Funções Avançadas
Funções AnônimasClosures e 'use'Arrow FunctionsFunções de CallbackUsando 'call_user_func'Funções VariáveisPassagem por ReferênciaFunções RecursivasRecapitulação: Mix de Funções4Arrays Multidimensionais
Criando um Array 2DAcessando Elementos de um Array 2DModificando Elementos de um Array 2DIterando com Loops AninhadosArrays Associativos 2DRecapitulação: Exercício de Grade Simples2Manipulações Avançadas de Arrays
Adicionando com 'array_push'Removendo com 'array_pop'Adicionando com 'array_unshift'Removendo com 'array_shift'Mesclando Arrays IndexadosMesclando Arrays AssociativosExtraindo com 'array_slice'Valores com 'in_array'Chaves com 'array_search'Recapitulação: Exercício de Playlist5Boletim de Alunos
Configuração do Projeto: Estrutura de DadosAdicionando um Novo AlunoAdicionando uma Nota a um AlunoCalculando a Média do AlunoEncontrando o Melhor AlunoGerando um Boletim8Tratamento de Erros e Exceções
Entendendo Erros no PHPO Bloco 'try...catch'O Bloco 'finally'Lançando uma ExceçãoCriando uma Exceção PersonalizadaUsando uma Exceção PersonalizadaRecapitulação: Validação de Entrada3Ordenação de Arrays
Ordenar Arrays Indexados (Crescente)Ordenar Arrays Indexados (Decrescente)Ordenar Arrays Associativos por ValorOrdenar Arrays Associativos por ChaveOrdenação por Ordem NaturalOrdenação Personalizada com 'usort'Recapitulação: Ordenação de Leaderboard