Considere o seguinte código escrito na linguagem PHP.<?ph...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: C - catch exception finally
O código apresentado é um exemplo clássico de manipulação de exceções na linguagem PHP. O tema central é o tratamento de exceções usando os blocos try, catch e finally. Para resolver essa questão, é necessário compreender como esses blocos interagem entre si e o fluxo de execução quando uma exceção é lançada.
No código, temos uma função chamada inversa que recebe um argumento $x. Se $x for igual a zero, a função lança uma exceção para evitar a divisão por zero, que é uma operação indefinida. Caso contrário, ela retorna o valor da inversa multiplicativa de $x, ou seja, 1/$x.
O bloco try executa o código que pode potencialmente lançar uma exceção. Se uma exceção é lançada, a execução do bloco try é interrompida imediatamente e o controle é passado para o primeiro bloco catch correspondente capaz de tratar essa exceção. No bloco catch, é possível executar código que gerencia a exceção lançada.
O bloco finally é opcional e será executado independentemente de uma exceção ser lançada ou não, ou seja, ele é usado para executar código que deve ser executado após a tentativa de execução do bloco try, mesmo que uma exceção seja capturada ou não.
Quando a função inversa é chamada com o valor 0, uma exceção é lançada. A execução do bloco try é então interrompida antes de imprimir "try" e o controle é passado ao bloco catch. Dentro do bloco catch, a mensagem "catch" é impressa seguida pela mensagem da exceção, que é "exception". Após o bloco catch, o bloco finally é executado, imprimindo "finally".
Portanto, a sequência de palavras impressa na tela será "catch exception finally".
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Quando ocorre uma exceção X dentro da cláusula try, o fluxo natural do código é imediatamente interrompido e, em seguida, continuado na cláusula catch que trata X. O finally será posteriormente executado independente de existir exceção ou não.
echo inversa(0); -> Vai lançar a exceção dentro do IF e ir direto para a cláusula catch sem imprimir nada
echo " catch " -> Imprime " catch "
echo $e->getMessage(); -> Imprime ' exception '
echo " finally "; -> Imprime " finally "
GAB C
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo