Le bloc 'finally'
Fait partie de la section Logique & Flux du Journey PHP de Coddy — leçon 54 sur 68.
Parfois, vous avez besoin d'un code qui s'exécute indépendamment du fait qu'une exception se produise ou non. Le bloc finally offre cette garantie : il contient du code qui s'exécutera toujours après la fin d'un bloc try...catch, ce qui le rend parfait pour les opérations de nettoyage comme la fermeture de fichiers ou de connexions à une base de données.
Le bloc finally s'exécute dans tous les scénarios : lorsque le bloc try réussit sans exceptions, lorsqu'une exception est levée et interceptée, et même lorsqu'une exception est levée mais n'est pas interceptée. Cette fiabilité le rend inestimable pour garantir que le code de nettoyage important s'exécute toujours.
<?php
try {
echo "Attempting operation...\n";
// Code qui pourrait lever une exception
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>Le bloc finally s'exécute après que les blocs try et catch se sont terminés, offrant un emplacement cohérent pour le code de nettoyage essentiel. Cela garantit que votre script gère correctement les ressources et maintient un état propre, quel que soit ce qui se passe pendant l'exécution.
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 deux entrées : un type d'opération et un nombre. La première entrée est une chaîne de caractères qui sera soit "divide" soit "multiply". La deuxième entrée est un nombre qui sera utilisé dans l'opération.
Lisez les deux entrées et créez un bloc try...catch...finally. À l'intérieur du bloc try, vérifiez le type d'opération :
- Si l'opération est
"divide", vérifiez si le nombre est zéro. S'il est nul, lancez une nouvelleExceptionavec le message"Cannot divide by zero". Si le nombre n'est pas nul, calculez 100 divisé par le nombre et affichez"Result: "suivi du résultat. - Si l'opération est
"multiply", calculez 100 multiplié par le nombre et affichez"Result: "suivi du résultat.
Dans le bloc catch, gérez toute exception en affichant "Error: " suivi du message de l'exception en utilisant la méthode getMessage().
Dans le bloc finally, affichez "Operation completed".
Format d'entrée :
- Première ligne : Une chaîne de caractères représentant le type d'opération (soit
dividesoitmultiply) - Deuxième ligne : Un nombre (exemple :
5ou0ou2.5)
Résultat attendu :
- Si l'opération réussit :
Result:suivi de la valeur calculée, puisOperation completedsur une nouvelle ligne - Si une division par zéro se produit :
Error: Cannot divide by zero, puisOperation completedsur une nouvelle ligne
Aide-mémoire
Le bloc finally contient du code qui s'exécute toujours après la fin d'un bloc try...catch, qu'une exception se produise ou non. Il est parfait pour les opérations de nettoyage comme la fermeture de fichiers ou de connexions à une base de données.
Le bloc finally s'exécute dans tous les scénarios :
- Lorsque le bloc
tryréussit sans exceptions - Lorsqu'une exception est levée et capturée
- Lorsqu'une exception est levée mais n'est pas capturée
<?php
try {
echo "Attempting operation...\n";
// Code qui pourrait lever une exception
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>Le bloc finally s'exécute après que les blocs try et catch se sont terminés, garantissant que le code de nettoyage essentiel s'exécute toujours.
Essayez vous-même
<?php
// Lire les entrées
$operation = trim(fgets(STDIN));
$number = floatval(fgets(STDIN));
// TODO : Écrivez votre code ci-dessous
// Créer un bloc try...catch...finally pour gérer l'opération
?>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