Menu
Coddy logo textTech

Lancer une exception

Fait partie de la section Logique & Flux du Journey PHP de Coddy — leçon 55 sur 68.

Parfois, vous devez signaler que quelque chose s'est mal passé dans votre code et arrêter l'exécution normale. Le mot-clé throw vous permet de créer et de lever manuellement une exception, vous donnant ainsi le contrôle sur le moment et la raison pour laquelle votre programme doit gérer une condition d'erreur.

Lorsque vous levez une exception, vous créez un nouvel objet Exception et lui fournissez un message descriptif sur ce qui s'est mal passé. Cette exception arrêtera immédiatement l'exécution du code actuel et cherchera un bloc catch pour la gérer.

<?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();
}
?>

L'instruction throw nécessite la syntaxe new Exception(), où vous passez un message sous forme de chaîne décrivant le problème. Ce message peut ensuite être récupéré à l'aide de la méthode getMessage() dans votre bloc catch, ce qui permet de comprendre plus facilement ce qui s'est mal passé et de répondre de manière appropriée.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Vous recevrez deux entrées : un nombre représentant un prix et un nombre représentant un pourcentage de remise. Les deux entrées seront fournies sous forme de nombres (le prix peut être un décimal et le pourcentage de remise sera un entier compris entre 0 et 100).

Lisez les deux entrées et créez une fonction appelée calculateFinalPrice qui accepte deux paramètres : le prix et le pourcentage de remise. À l'intérieur de cette fonction, vérifiez si le pourcentage de remise est supérieur à 100 ou inférieur à 0. Si l'une ou l'autre de ces conditions est vraie, lancez une nouvelle Exception avec le message "Invalid discount percentage". Si la remise est valide, calculez le prix final après application de la remise et retournez-le.

Utilisez un bloc try...catch pour appeler la fonction avec les entrées fournies. Dans le bloc try, appelez la fonction et affichez "Final price: " suivi du prix final calculé. Dans le bloc catch, gérez l'exception en affichant "Error: " suivi du message de l'exception en utilisant la méthode getMessage().

Format d'entrée :

  • Première ligne : Un nombre représentant le prix (exemple : 100 ou 49.99)
  • Deuxième ligne : Un entier représentant le pourcentage de remise (exemple : 20 ou 150)

Sortie attendue :

  • Si la remise est valide : Final price: suivi du prix calculé après remise
  • Si la remise est invalide : Error: Invalid discount percentage

Aide-mémoire

Utilisez le mot-clé throw pour créer et lancer manuellement des exceptions :

throw new Exception("Error message");

Lorsqu'une exception est lancée, elle arrête l'exécution normale et recherche un bloc catch pour la gérer :

<?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();
}
?>

Utilisez la méthode getMessage() dans le bloc catch pour récupérer le message d'exception.

Essayez vous-même

<?php
// Lire les entrées
$price = floatval(fgets(STDIN));
$discountPercentage = intval(fgets(STDIN));

// TODO : Écrivez votre code ci-dessous
// Créer la fonction calculateFinalPrice
// Utiliser un bloc try...catch pour appeler la fonction et gérer les exceptions
// Afficher la sortie appropriée

?>
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux