Exception PHP
Qu'est-ce qu'une exception ?
Une exception est un objet qui décrit une erreur ou un comportement inattendu d'un script PHP.
Des exceptions sont levées par de nombreuses fonctions et classes PHP.
Les fonctions et les classes définies par l'utilisateur peuvent également lever 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' throw
instruction permet à une fonction ou méthode définie par l'utilisateur de lever une exception. Lorsqu'une exception est levée, le code qui la 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'attraper :
Exemple
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?>
Le résultat ressemblera à ceci :
Fatal error: Uncaught Exception: Division by zero in
C:\webfolder\test.php:4
Stack trace: #0 C:\webfolder\test.php(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.php on line 4
La déclaration try...catch
Pour éviter l'erreur de l'exemple ci-dessus, nous pouvons utiliser l'
try...catch
instruction pour intercepter les exceptions et poursuivre le processus.
Syntaxe
try {
code that can throw exceptions
} catch(Exception $e) {
code that runs when an exception is caught
}
Exemple
Afficher un message lorsqu'une exception est levée :
<?php
function divide($dividend, $divisor) {
if($divisor ==
0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo
divide(5, 0);
} catch(Exception $e) {
echo "Unable to divide.";
}
?>
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
.
La déclaration essayer ... attraper ... enfin
L' try...catch...finally
instruction peut être utilisée pour intercepter des exceptions. Le code dans le
finally
bloc s'exécutera toujours, qu'une exception ait été interceptée ou non. Si
finally
est présent, le catch
bloc est facultatif.
Syntaxe
try {
code that can throw exceptions
} catch(Exception $e) {
code that runs when an exception is caught
} finally {
code that
always runs regardless of whether an exception was caught
}
Exemple
Afficher un message lorsqu'une exception est levée, puis indiquer que le processus est terminé :
<?php
function divide($dividend, $divisor) {
if($divisor
== 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo
divide(5, 0);
} catch(Exception $e) {
echo "Unable to
divide. ";
} finally {
echo "Process complete.";
}
?>
Exemple
Affiche 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 by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} finally {
echo
"Process complete.";
}
?>
L'objet d'exception
L'objet Exception contient des informations sur l'erreur ou le comportement inattendu rencontré par la fonction.
Syntaxe
new Exception(message, code, previous)
Valeurs des paramètres
Parameter | Description |
---|---|
message | Optional. A string describing why the exception was thrown |
code | Optional. An integer that can be used used to easily distinguish this exception from others of the same type |
previous | Optional. If this exception was thrown in a catch block of another exception, it is recommended to pass that exception into this parameter |
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 :
Method | Description |
---|---|
getMessage() | Returns a string describing why the exception was thrown |
getPrevious() | If this exception was triggered by another one, this method returns the previous exception. If not, then it returns null |
getCode() | Returns the exception code |
getFile() | Returns the full path of the file in which the exception was thrown |
getLine() | Returns the line number of the line of code which threw the exception |
Exemple
Informations de sortie sur une exception qui a été levée :
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero", 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 thrown in $file on line
$line: [Code $code]
$message";
}
?>
Référence complète des exceptions
Pour une référence complète, consultez notre Référence complète des exceptions PHP .
La référence contient des descriptions et des exemples de toutes les méthodes Exception.