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.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileVous 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
InvalidCredentialsExceptionavec le message"Username cannot be empty" - Si la longueur du mot de passe est inférieure à la longueur minimale, lancez une
InvalidCredentialsExceptionavec 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_doeou 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
?>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
1Fonctions avancées
Fonctions anonymesClosures et 'use'Fonctions fléchéesFonctions de rappelUtilisation de 'call_user_func'Fonctions variablesPassage par référenceFonctions récursivesRécapitulatif : Mélange de fonctions4Tableaux multidimensionnels
Créer un tableau 2DAccéder aux éléments d'un tableau 2DModifier les éléments d'un tableau 2DItérer avec des boucles imbriquéesTableaux associatifs 2DRécapitulatif : Exercice de grille simple2Manipulations avancées de tableaux
Ajouter avec 'array_push'Supprimer avec 'array_pop'Ajouter avec 'array_unshift'Supprimer avec 'array_shift'Fusionner des tableaux indexésFusionner des tableaux associatifsExtraire avec 'array_slice'Valeurs avec 'in_array'Clés avec 'array_search'Récapitulatif : Exercice Playlist5Carnet de notes des élèves
Configuration du projet : Structure de donnéesAjouter un nouvel élèveAjouter une note à un élèveCalculer la moyenne d'un élèveTrouver le meilleur élèveGénérer un bulletin de notes8Gestion des erreurs et des exceptions
Comprendre les erreurs PHPLe bloc 'try...catch'Le bloc 'finally'Lancer une exceptionCréer une exception personnaliséeUtiliser une exception personnaliséeRécapitulatif : Validation des entrées3Tri des tableaux
Trier les tableaux indexés par ordre croissantTrier les tableaux indexés par ordre décroissantTrier les tableaux associatifs par valeurTrier les tableaux associatifs par cléTri par ordre naturelTri personnalisé avec 'usort'Récapitulatif : Tri d'un classement