Article mis à jour le : 05-05-2022
Gestion des erreurs et exceptions en PHPPour créer un site de qualité, il est important de bien gérer ses erreurs (afin d'éviter d'avoir l'horrible message "WARNING"), mais également les exceptions, afin de pouvoir continuer l'exécution de script et de pouvoir présenter une page tenant compte de cette erreur.
Une chose simple à connaître. Quand vous faites un try-catch, vous verrez plus bas, vous devez savoir que vous pouvez afficher ce que vous voulez dans le bloc catch.
Cependant, vous pouvez aussi choisir d'afficher en plus le message d'erreur, mais également de choisir de stopper ou continuer le script malgré l'erreur.
Pour afficher l'erreur, vous pouver utiliser :
Pour stopper le script, vous utiliser:
Les deux peuvent être combinées:
L'important pour un code de qualité est d'attraper les exceptions, pour que le code continue à s'exécuter, et de bien les gerer, pour éviter les horribles messages d'erreurs. Pour cela nous créons une instance de la classe Exception. Cependant, celle-ci permet d'utiliser plusieurs paramètres optionnels, comme le message d'erreur, l'affichage du code fautif...
Soit ce petit module pour calculer la différence entre deux nombres. Pour que l'opération soit réalisable, il faut que les deux varibles soient numériques :
PHP permet de créer ses propres classes d'exception qui héritent de la classe Exception. Vous ne pouvez réécrire que les fonctions __contruct et __toString() Les autres, comme getMessage() ou getFile() sont déclarées final et ne peuvent être modifiées.
PHP gère nativement des exceptions pour plusieurs cas de figure, la liste complète étant disponible.
Par exemple, afin de faire un code plus clair et plus adapté, notamment dans le cas où vous utilisieriez plusieurs blocs catch...
Dans notre exemple précédent, nous aurions lors du lancement de l'exception :
avec le catch approprié...
Il est très IMPORTANT de s'en servir d'un point de vue loqique et qualitatif!
Les messages de type warning sont également très laids, et afin de les gérer au mieux d'un point de vue qualité du code, il est possible de les convertir en exception :
Avant le début de votre bloc try-catch, appelez cette fonction, en lui passant en paramètre le nom d'une fonction que nous allons utiliser :
Méthode ou fonction que l'on definit :
class CustomExceptionHandler
{
/**
* Custom error handler.
* Can be used to catch warnings.
* Example of utilization :
*
* set_error_handler([CustomExceptionHandler::class, 'exceptions_error_handler']);
* ... (do you stuff here)
* restore_error_handler();
*
*
* @param $severity
* @param $message
* @throws Exception
*/
public static function exceptions_error_handler($severity, $message)
{
if (error_reporting() == 0) {
return;
}
if (error_reporting() & $severity) {
throw new Exception($message);
}
}
}
Vous n'êtes pas obligé de définir ce handler pour toute votre application. Vous pouvez le faire si vous le désirez que pour un morceau bien défini pour ensuite revenir au fonctionnement "normal":
Suite à la partie précédente, il est interessant de pouvoir personnaliser les exceptions non attrapées :
Fonction que l'on définit :