Menu
Coddy logo textTech

Utiliser une exception personnalisée

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

Maintenant que vous avez créé votre propre classe d'exception personnalisée, il est temps de la mettre en pratique. L'utilisation d'une exception personnalisée comporte deux étapes clés : lever votre type d'exception spécifique lorsqu'un problème survient, et intercepter ce type d'exception spécifique pour le gérer de manière appropriée.

Lorsque vous levez une exception personnalisée, vous utilisez le même mot-clé throw mais vous créez une instance de votre classe personnalisée au lieu de la classe générique Exception. Cela rend votre gestion des erreurs plus précise et significative.

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}
?>

La véritable puissance réside dans la capture de votre exception personnalisée. Au lieu de capturer une Exception générique, vous pouvez capturer votre InvalidEmailException spécifique. Cela vous permet de gérer différents types d'erreurs de différentes manières, rendant votre gestion des erreurs plus ciblée et informative.

<?php
try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

Cette approche vous donne un contrôle précis sur la gestion des erreurs, vous permettant de répondre différemment aux divers types de problèmes dans votre application.

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 trois entrées : une chaîne de caractères pour le nom d'utilisateur, une chaîne de caractères pour le mot de passe et un nombre pour la longueur minimale du mot de passe. Le nom d'utilisateur ne doit pas être vide et le mot de passe doit respecter l'exigence de longueur minimale.

Créez une classe d'exception personnalisée appelée InvalidCredentialsException qui étend la classe de base Exception.

Créez une fonction appelée validateCredentials qui accepte trois paramètres : le nom d'utilisateur, le mot de passe et la longueur minimale. À l'intérieur de cette fonction :

  • Si le nom d'utilisateur est vide (une chaîne vide), lancez une InvalidCredentialsException avec le message "Username cannot be empty"
  • Si la longueur du mot de passe est inférieure à la longueur minimale, lancez une InvalidCredentialsException avec le message "Password must be at least X characters long" (où X est la valeur de la longueur minimale)
  • Si les deux validations réussissent, affichez "Credentials are valid"

Utilisez un bloc try...catch pour appeler la fonction avec les entrées fournies. Dans le bloc catch, capturez spécifiquement l'exception InvalidCredentialsException et affichez "Validation error: " suivi du message de l'exception en utilisant la méthode getMessage().

Format d'entrée :

  • Première ligne : Une chaîne représentant le nom d'utilisateur (exemple : john_doe ou une chaîne vide)
  • Deuxième ligne : Une chaîne représentant le mot de passe (exemple : pass123)
  • Troisième ligne : Un entier représentant la longueur minimale du mot de passe (exemple : 8)

Résultat attendu :

  • Si les identifiants sont valides : Credentials are valid
  • Si le nom d'utilisateur est vide : Validation error: Username cannot be empty
  • Si le mot de passe est trop court : Validation error: Password must be at least X characters long (où X est la longueur minimale)

Aide-mémoire

Pour utiliser des exceptions personnalisées, lancez une instance de votre classe personnalisée et capturez ce type d'exception spécifique :

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}

try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

Cela permet une gestion précise des erreurs en capturant des types d'exceptions spécifiques plutôt que des objets Exception génériques.

Essayez vous-même

<?php
// Lire l'entrée
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));

// TODO : Écrivez votre code ci-dessous
// 1. Créer la classe InvalidCredentialsException
// 2. Créer la fonction validateCredentials
// 3. Utiliser un bloc try...catch pour appeler la fonction et gérer les exceptions

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