Les exceptions
Notions théoriques
Dans le monde réel, les erreurs sont inévitables. Dans le monde de la programmation, c'est la même chose. Les exceptions en PHP sont un moyen de gérer les erreurs qui peuvent survenir lors de l'exécution d'un programme.
Une exception est simplement une "exception" à l'exécution normale du programme.
Lorsqu'une erreur se produit, une exception est "levée" (ou "throw" en anglais).
Si l'exception n'est pas "attrapée" (ou "catch" en anglais), le programme s'arrête et une erreur est affichée.
Pour attraper une exception, nous utilisons un bloc try/catch
.
Le code dans le bloc try
est exécuté
- et si une exception est levée,
- l'exécution du programme passe au bloc
catch
, où l'exception est traitée.
Exemple pratique
function checkStrength($strength) {
if($strength < 0) {
throw new Exception('La force du guerrier ne peut pas être négative');
}
}
try {
// Code qui peut lever une exception
$fighterStrength = -5; // Exemple de force négative
checkStrength($fighterStrength);
echo "La force du guerrier est valide.";
} catch(Exception $e) {
// Code qui est exécuté si une exception est attrapée
echo 'Erreur : ' . $e->getMessage();
}
Dans cet exemple, si la force du guerrier est négative:
une exception est levée avec le message "La force du guerrier ne peut pas être négative".
Si cette exception est attrapée, le message d'erreur est affiché à l'utilisateur.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Objectif du TP
Dans ce TP, nous allons ajouter une gestion des erreurs à notre fonction addFighter()
. Nous allons vérifier que la force et la défense du guerrier sont des nombres positifs et lever une exception si ce n'est pas le cas.
Étapes à suivre
-
Placez vous dans votre répertoire
tp_game
(dans "Documents"). -
Dans votre fichier
main.php
, il y a déjà une fonctionaddFighter()
qui prend en paramètres le nom, la force et la défense d'un guerrier.function addFighter($name, $strength, $defense) {
} -
**Ajoutez un bloc
try/catch
autour des lignes :$dbh = new PDO ...
- ...
$stmt->execute();
-
Dans le bloc
catch
, affichez un message d'erreur clair (avec le message de l'exception) à l'utilisateur. -
Mettre un n° de port MySQL/MariaDB inaccessible, par exemple
port=3310
), afin de générer une erreur de connexion. -
Lancez votre programme principal pour tester votre fonction
addFighter()
.Par exemple :
...
print("Démarrage du programme" . "\n");
addFighter("Joueur 4", 90, 80);
addFighter("Joueur 5", 95, 85);
addFighter("Joueur 6", 88, 82);
addFighter("Joueur 7", 100, 100);
print("Fin du programme" . "\n");
Une solution
Vous devez être connecté pour voir le contenu.