Lançando uma Exceção
Parte da seção Lógica & Fluxo do Journey de PHP da Coddy — lição 55 de 68.
Às vezes, você precisa sinalizar que algo deu errado em seu código e interromper a execução normal. A palavra-chave throw permite que você crie e lance manualmente uma exceção, dando a você controle sobre quando e por que seu programa deve lidar com uma condição de erro.
Quando você lança uma exceção, você cria um novo objeto Exception e fornece a ele uma mensagem descritiva sobre o que deu errado. Esta exceção interromperá imediatamente a execução do código atual e procurará por um bloco catch para tratá-la.
<?php
function checkAge($age) {
if ($age < 0) {
throw new Exception("Age cannot be negative");
}
echo "Age is valid: " . $age;
}
try {
checkAge(-5);
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
?>A instrução throw requer a sintaxe new Exception(), onde você passa uma mensagem de string descrevendo o problema. Esta mensagem pode ser recuperada posteriormente usando o método getMessage() em seu bloco catch, tornando mais fácil entender o que deu errado e responder adequadamente.
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 número representando um preço e um número representando uma porcentagem de desconto. Ambas as entradas serão fornecidas como números (o preço pode ser um decimal e a porcentagem de desconto será um número inteiro entre 0 e 100).
Leia ambas as entradas e crie uma função chamada calculateFinalPrice que aceite dois parâmetros: o preço e a porcentagem de desconto. Dentro desta função, verifique se a porcentagem de desconto é maior que 100 ou menor que 0. Se qualquer uma das condições for verdadeira, lance uma nova Exception com a mensagem "Invalid discount percentage". Se o desconto for válido, calcule o preço final após aplicar o desconto e retorne-o.
Use um bloco try...catch para chamar a função com as entradas fornecidas. No bloco try, chame a função e imprima "Final price: " seguido pelo preço final calculado. No bloco catch, trate a exceção imprimindo "Error: " seguido pela mensagem da exceção usando o método getMessage().
Formato de entrada:
- Primeira linha: Um número representando o preço (exemplo:
100ou49.99) - Segunda linha: Um número inteiro representando a porcentagem de desconto (exemplo:
20ou150)
Saída esperada:
- Se o desconto for válido:
Final price:seguido pelo preço calculado após o desconto - Se o desconto for inválido:
Error: Invalid discount percentage
Folha de consulta
Use a palavra-chave throw para criar e lançar exceções manualmente:
throw new Exception("Error message");Quando uma exceção é lançada, ela interrompe a execução normal e procura por um bloco catch para tratá-la:
<?php
function checkAge($age) {
if ($age < 0) {
throw new Exception("Age cannot be negative");
}
echo "Age is valid: " . $age;
}
try {
checkAge(-5);
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
?>Use o método getMessage() no bloco catch para recuperar a mensagem da exceção.
Experimente você mesmo
<?php
// Ler as entradas
$price = floatval(fgets(STDIN));
$discountPercentage = intval(fgets(STDIN));
// TODO: Escreva seu código abaixo
// Crie a função calculateFinalPrice
// Use o bloco try...catch para chamar a função e lidar com exceções
// Imprima a saída apropriada
?>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