mai 30th, 2008Les Exceptions
Une Exception est une classe d’erreur souvent disponible sur tous les langages en orienté objets. Cette classe est disponible depuis PHP5 et elle est de plus en plus utilisée pour la gestion d’erreur dans un contexte POO.
Un tour d’horizon de la classe
Tout d’abord, la classe à trois variables importantes accessibles par leur fonction respective. Chaque variable est typé protected ce qui veut dire qu’elles ne peuvent être modifiées ou lues de l’extérieur de la classe ou des classes parent/enfant.
- message : contient le message assigné à la classe.
- line : contient la ligne où l’erreur s’est produite.
- file : contient le fichier où s’est produit l’erreur.
Ensuite il existe 5 méthodes dans la classe Exception accessible sous le format $exception->méthode()
- getMessage() : retourne le message d’erreur assigné lors de la création de la classe.
- getCode() : retourne le code d’erreur
- getLine() : retourne la ligne où l’erreur s’est produite.
- getFile() : retourne le fichier où l’erreur s’est produite.
- getTrace() : retourne un tableau associatif qui contient plusieurs informations sur l’erreur que voici:
- file : le fichier où s’est produite l’erreur.
- line : la ligne où s’est produite l’erreur.
- function : la fonction où s’est produite l’erreur.
- class : la classe où s’est produite l’erreur.
- type : type d’appelle de la fontion (static, public etc.).
- args : tableau associatif contenant les arguements passés à la fonction.
- getTraceAsString : retourne la même chose que getTrace mais sous forme de chaine de texte.
Bien comprendre les Exceptions
Utiliser une exception est fort simple. Il suffit de le voir comme la relation entre le lanceur et le receveur au baseball. Le lanceur est le programmeur alors que le receveur est PHP. Tout d’abord, le lanceur choisi qu’elle balle lancer, ensuite le receveur attrape la balle. Que cette balle soit une rapide, une courbe ou un changement de vitesse, il l’attrape. La différence entre le receveur et PHP est que PHP adapte son action en conséquence du type d’exception lancé. Mais avant de rentrer dans la partie la plus dure du sujet, utilisons une exception pour bien comprendre son fonctionnement dans le code.
throw new Exception('une erreur est survenu');
Si vous essayé ce code vous aller avoir l’erreur suivante : Fatal error: Uncaught exception. Nous devons y aller de deux étapes pour régler cette erreur. La première, essayer de lancé l’exception et ensuite l’attraper
try{
throw new Exception('une erreur est survenu');
}
catch(Exception $e){
echo $e->getMessage();
}
Ce code écrira le message d’erreur, qui dans ce cas-ci est une erreur est survenu. L’avantage de la gestion d’erreur est que nous pouvons faire a peu près n’importe quoi suite à une erreur voulu. Par erreur voulu, je veux dire une erreur déclarée par le programmeur après une validation. Voici une exception dans un contexte réelle.
function check_type($int){
if(!is_numeric($int)){
throw new Exception('Vous devez envoyer un nombre en argument.');
}
return true;
}
try{
check_type('test');
}
catch(Exception $e){
exit($e->getMessage());
}
Vos propre classe Exception
Il est possible grâce à l’héritage de créer vos propres classes d’exception. Pourquoi? Pour vous permettre de gérer plusieurs types d’erreur de manière différente. Disons pour notre exemple que nous voulons un type d’erreur d’exécution. Le message d’erreur sera toujours la même grâce à l’héritage, ce qui veut dire que le message d’erreur ne sera pas obligatoirement passé en argument lors de l’envoi de l’exception.
class Execution_Exception extends Exception{
protected $message = 'Erreur d\'éxécution';
public function __construct(){}
}
try{
throw new Execution_Exception();
}
catch(Execution_Exception $e){
exit($e->getMessage());
}
Adieu Try/Catch!
Vous conviendrez avec moi que d’écrire la syntaxe Try/Catch à chaque Exception serait relativement pénible. Ça serait du trouble qui ferait en sorte qu’aucun programmeur n’utiliserait les Exceptions et se tournerait vers la bonne vieille fonction die(). Heureusement, PHP à créé une fonction appelé set_exception_handler() qui vous permet de dire à PHP d’appeler la fonction de votre choix s’il ne trouve pas la syntaxe Try/Catch. Cette fonction est un bijou en soit et vous ouvre la porte à une multitude d’avenu pour la gestion d’erreur. Par exemple, vous pourriez dans cette fonction ajouter un système de Log qui vous permettrait de garder la trace des erreurs survenu sur votre site web. Voici un petit bout de code qui vous montre brièvement l’utilisation de set_exception_handler().
set_exception_handler("exceptionHandler");
function exceptionHandler($exception){
echo $exception->getMessage();
}
class Execution_Exception extends Exception{
protected $message = 'Erreur d\'éxécution';
public function __construct(){}
}
throw new Execution_Exception();
Voila pour ce petit tour d’horizon rapide des Exceptions. Implémenter des Exceptions nécessite un peu plus de temps de programmation, mais un coup complété, on en sort un réelle plaisir à les utiliser.









