Les exceptions
Introduction
La gestion d’erreurs n’est pas toujours facile avec PHP : aucune réelle gestion d’erreur n’ayant été implantée. Il existe bien entendu quelques fonctions réservées à ces fins, comme set_error_handler() ou trigger_error().
Cependant, ces fonctions ne permettent pas une réelle gestion d’erreurs directement intégrée dans votre code.
Plusieurs ont tenté de contourner ce problème en créant des fonctions permettant de gérer plus ou moins les erreurs en renvoyant la valeur FALSE ou NULL.
Cette manière de faire soulève un autre problème : Comment savoir si la fonction a bel et bien retournée un résultat nul et non pas une erreur? Impossible de différencier une erreur d’un résultat nul. Ici se dresse donc les limites de la gestion d’erreurs actuelles avec PHP4.
Notion d’exception
PHP5 introduit la notion d’exception. Une exception est une erreur rencontrée lors de l’exécution de votre script.
Vous pouvez déclencher une erreur à tout moment et créer une série d’opérations prévue pour ce genre d’évènements.
Cette nouvelle structure de contrôle introduit try..catch() et throw. De même qu’une nouvelle classe, exception.
Cette gestion d’erreurs se veut grandement inspirée de Java, Javascript, Delphi, VisualBasic, etc.
throw
throw permet de déclencher une exception lorsqu’une erreur survient. Il vous est possible d’indiquer la nature de l’erreur de même ainsi que de lui associer un numéro d’erreur (optionel).
Exemple
<?php if (FALSE === file_exists($filename)) { throw new Exception('Fichier introuvable.'); }?>
try..catch()
try..catch() est une structure de contrôle d’erreurs. Elle vous permet “d’attraper” une exception survenue dans le bloc try et de la traiter dans le bloc catch.
Exemple
<?php try { if (FALSE === file_exists($filename)) { throw new Exception('Fichier introuvable.'); } } catch (Exception $e) { echo 'Message: ' . $e->getMessage() . '<br />'; echo 'Code: ' . $e->getCode() . '<br />'; echo 'Fichier: ' . $e->getFile() . '<br />'; echo 'Ligne: ' . $e->getLine() . '<br />'; } ?>
La classe exception
La classe exception se compose des propriétés et méthodes suivantes:
<?php class Exception { protected $message = 'Unknown exception'; protected $code = 0; protected $file; protected $line; function __construct($message = null, $code = 0); final function getMessage(); final function getCode(); final function getFile(); final function getLine(); final function getTrace(); final function getTraceAsString(); function __toString(); } ?>