Menu
Coddy logo textTech

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.

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 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: 100 ou 49.99)
  • Segunda linha: Um número inteiro representando a porcentagem de desconto (exemplo: 20 ou 150)

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

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