Définition
Il faut voir les erreurs comme un signal qui vous indique un comportement inattendu de votre script à l'exécution.
Si l'on prend par exemple le message d'erreur suivant :
Notice: Undefined variable: myVar in /www/index.php on line 2
Lors de l'exécution du script, ce dernier nous indique simplement que nous avons à faire à une erreur commune. Nous utilisons une variable (ici myVar) qui n'a pas été au préalablement déclarée.
Dans l'idéal lorsque vous rencontrez une erreur, vous ne devez pas l'ignorer ou la cachée (avec l'opérateur @ comme on le vois trop souvent), mais traiter le comportement inattendu dont il est question.
Ignorer une erreur au lieu de la traitée relève plus de l'inconscience que d'autre chose.
Le fonctionnement des erreurs
En PHP, comprendre le mécanisme des erreurs est chose facile. Lors de l'exécution de votre script l'interpréteur s'occupe d'opérer les opérations que vous souhaitez.
Cependant, lors du déclenchement de ce que nous appellerons un « comportement inattendu » c'est le gestionnaire d'erreur qui prendra le relais.
Voyez le gestionnaire d'erreur comme une fonction qui va traiter un comportement inattendu lorsqu'il se produit. Nous appellerons cette fonction « error_handler », traduit en français cela donnerais « gestionnaire d'erreur ».
Cette fonction possède quelques informations sur l'erreur qu'elle doit traiter afin de savoir ce qu'elle doit faire : le fichier et la ligne concerné, un message descriptif et le niveau d'erreur.
Par défaut en PHP, cette fonction error_handler ressemble sans doutes à quelque chose comme ceci :
function error_handler($errno, $errstr, $errfile, $errline) {
switch ($errno) {
case E_NOTICE:
case E_USER_NOTICE:
$errors = "Notice";
break;
case E_WARNING:
case E_USER_WARNING:
$errors = "Warning";
break;
case E_ERROR:
case E_USER_ERROR:
$errors = "Fatal Error";
break;
default:
$errors = "Unknown";
break;
}
if (ini_get("display_errors"))
printf ("
\n%s: %s in %s on line %d
\n", $errors, $errstr, $errfile, $errline);
if (ini_get('log_errors'))
error_log(sprintf("PHP %s: %s in %s on line %d", $errors, $errstr, $errfile, $errline));
return true;
}
Comme vous pourrez le voir, selon les apparences cette fonction correspond tout à fait à ce que l'on peut imaginer du gestionnaire d'erreur par défaut de PHP lorsqu'il affiche les messages d'erreur à l'écran.
Les niveaux d'erreurs
Si c'est la première fois que vous vous intéressez aux erreurs avec PHP, vous devez sans doutes vous demander ce que signifie E_ERROR, E_WARNING, E_NOTICE, etc.
Ce sont en réalité différents niveaux d'erreur. Si je simplifie, PHP distingue trois niveau d'erreurs différents. Cela permet d'identifier un comportement inattendu en fonction de l'importance de son influence sur le fonctionnement du script.
E_NOTICE
Le premier niveau d'erreur - que nous appellerons NOTICE - représenté ici à la base de notre pyramide correspond aux informations à signaler.
Il s'agit du niveau le moins important, les comportements inattendus classés selon ce rang n'auront réellement aucune incidence sur la suite de l'exécution de votre script.
E_WARNING
Au centre de notre pyramide, nous trouvons les erreurs de type WARNING. Les comportements inattendus de ce type commencent à être plus grave.
Les WARNING ne correspondent pas à un problème grave, mais vous informe qu'un problème pouvant entraîner par la suite une erreur fatale à votre script viens de se produire.
E_ERROR
L'erreur fatale. Rien à faire, le problème est tellement grave que votre script ne peut pas continuer plus loin et doit s'arrêter.
C'est le niveau d'erreur le plus haut et lorsqu'une erreur de ce type survient elle mettra un terme soudain à l'exécution.
Traiter et éviter les erreurs
Maintenant que vous savez ce que sont les erreurs en PHP, vous n'avez plus aucune excuse pour les laisser se produire. Vous devez impérativement traiter les erreurs et ne pas les ignorer.
Cacher une erreur avec l'opérateur @, ou en donnant la valeur false à la directive display_errors du php.ini est une mauvaise pratique. Si vous connaissez l'existence d'un comportement inattendu grâce à un message d'erreur, vous devez le traiter.
Sécurité, de consommation de ressources, de lisibilité du code … Nombreuses sont les raisons qui doivent vous faire prendre conscience que vous devez traiter les erreurs !
Personnaliser le gestionnaire d'erreur
Pour terminer sur une petite note sympa, je vous invite à découvrir la fonction PHP set_error_handler(). Comme nous l'avons vu plus haut, le gestionnaire d'erreur de PHP peut être vu comme un simple fonction. Ainsi, PHP vous laisse la possibilité d'utiliser une de vos propres fonctions pour traiter les erreurs.
Vous pourrez alors imaginer toute sorte de traitements pour résoudre les comportements inattendus de votre script.
A lire également sur le sujet
- Niveaux d'erreurs et constantes PHP
- set_error_handler()
- POO PHP5 : Design Pattern observateur aidé de la Standard PHP Library (SPL)