PHP Exceptions
Qu'est-ce qu'une Exception ?
Une exception est un objet qui décrit une erreur ou un comportement inattendu d'un script PHP.
Les exceptions sont lancées par de nombreuses fonctions et classes PHP.
Les fonctions et classes définies par l'utilisateur peuvent également lancer des exceptions.
Les exceptions sont un bon moyen d'arrêter une fonction lorsqu'elle rencontre des données qu'elle ne peut pas utiliser.
Lancer une Exception
L'instruction throw permet à une fonction ou méthode définie par l'utilisateur de lancer une exception. Lorsque une exception est lancée, le code qui suit ne sera pas exécuté.
Si une exception n'est pas interceptée, une erreur fatale se produira avec un message "Exception non interceptée".
Essayons de lancer une exception sans l'intercepter :
Exemple
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division par zéro");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?> Le résultat ressemblera à ceci :
Erreur fatale : Exception non interceptée : Division par zéro dans C:\webfolder\test.php:4
Trace de la pile : #0 C:\webfolder\test.php(9):
divide(5, 0) #1 {main} lancé dans C:\webfolder\test.php à la ligne 4 L'instruction try...catch
Pour éviter l'erreur de l'exemple ci-dessus, nous pouvons utiliser l'instruction try...catch pour intercepter les exceptions et continuer le processus.
Syntaxe
try {
code qui peut lancer des exceptions
} catch(Exception $e) {
code qui s'exécute lorsqu'une exception est interceptée
} Exemple
Afficher un message lorsqu'une exception est lancée :
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division par zéro");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "Impossible de diviser.";
}
?> Le bloc catch indique quel type d'exception doit être intercepté et le nom de la variable qui peut être utilisée pour accéder à l'exception. Dans l'exemple ci-dessus, le type d'exception est Exception et le nom de la variable est $e .
L'instruction try...catch...finally
L'instruction try...catch...finally peut être utilisée pour intercepter des exceptions. Le code dans le bloc finally s'exécutera toujours, qu'une exception ait été interceptée ou non. Si finally est présent, le bloc catch est optionnel.
Syntaxe
try {
code qui peut lancer des exceptions
} catch(Exception $e) {
code qui s'exécute lorsqu'une exception est interceptée
} finally {
code qui s'exécute toujours, qu'une exception ait été interceptée ou non
} Exemple
Afficher un message lorsqu'une exception est lancée puis indiquer que le processus est terminé :
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division par zéro");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "Impossible de diviser. ";
} finally {
echo "Processus terminé.";
}
?> Exemple
Afficher une chaîne même si une exception n'a pas été interceptée :
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division par zéro");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} finally {
echo "Processus terminé.";
}
?> L'objet Exception
L'objet Exception contient des informations sur l'erreur ou le comportement inattendu que la fonction a rencontré.
Syntaxe
new Exception(message, code, previous) Valeurs des paramètres
| Paramètre | Description |
|---|---|
| message | Optionnel. Une chaîne décrivant pourquoi l'exception a été lancée. |
| code | Optionnel. Un entier qui peut être utilisé pour distinguer facilement cette exception des autres du même type. |
| previous | Optionnel. Si cette exception a été lancée dans un bloc catch d'une autre exception, il est recommandé de passer cette exception dans ce paramètre. |
Méthodes
Lors de l'interception d'une exception, le tableau suivant montre certaines des méthodes qui peuvent être utilisées pour obtenir des informations sur l'exception :
| Méthode | Description |
|---|---|
| getMessage() | Renvoie une chaîne décrivant pourquoi l'exception a été lancée. |
| getPrevious() | Si cette exception a été déclenchée par une autre, cette méthode renvoie l'exception précédente. Sinon, elle renvoie null . |
| getCode() | Renvoie le code de l'exception. |
| getFile() | Renvoie le chemin complet du fichier dans lequel l'exception a été lancée. |
| getLine() | Renvoie le numéro de ligne du code qui a lancé l'exception. |
Exemple
Afficher des informations sur une exception qui a été lancée :
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division par zéro", 1);
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $ex) {
$code = $ex->getCode();
$message = $ex->getMessage();
$file = $ex->getFile();
$line = $ex->getLine();
echo "Exception lancée dans $file à la ligne $line : [Code $code]
$message";
}
?> Référence complète des Exceptions
Pour une référence complète, allez à notre Référence complète des Exceptions PHP .
La référence contient des descriptions et des exemples de toutes les méthodes d'exception.