Le mécanisme des exceptions a été introduit à PHP dans sa version 5 en complément de son nouveau modèle orienté objet. Au même titre qu'en Java, C++, Action Script 3 ou bien Visual Basic (pour ne citer que ces langages de programmation), les exceptions permettent de simplifier, personnaliser et d'organiser la gestion des « erreurs » dans un programme informatique. Ici le mot « erreurs » ne signifie pas « bug », qui est un comportement anormal de l'application développée, mais plutôt « cas exceptionnel » à traiter différemment dans le déroulement du programme. Etudions donc comment fonctionnent les exceptions.
Nous introduirons dans un premier temps la classe native Exception de PHP 5. Puis nous étudierons comment lancer et attraper des exceptions dans un programme. A partir de là, nous serons capables d'étendre le modèle Exception pour développer des exceptions dérivées et de types différents. Enfin, nous aborderons la notion de gestion évènementielle des exceptions au moyen du handler d'exception natif de php.
Comme nous l'avons déjà expliqué dans les précédents tutoriels du chapitre de programmation orientée objet, PHP dispose depuis sa version 5 d'un modèle objet semblable à celui de Java. Pour agrémenter ce nouveau moteur, l'équipe de développement de PHP a intégré en natif une classe Exception. Cette classe très particulière permet au développeur de simplifier le traitement des cas exceptionnels susceptibles d'apparaître pendant l'exécution d'un programme en générant des objets de type Exception. En fin de compte, retenez qu'une exception n'est rien de plus qu'un objet (instance d'une classe). Le listing ci-après présente le code de la classe Exception.
Code source de la classe native Exception (extrait de la documentation officielle de PHP)<?phpclass Exception{protected $message = 'exception inconnu'; // message de l'exceptionprotected $code = 0; // code de l'exception défini par l'utilisateurprotected $file; // nom du fichier source de l'exceptionprotected $line; // ligne de la source de l'exceptionfunction __construct(string $message=NULL, int code=0);final function getMessage(); // message de l'exceptionfinal function getCode(); // code de l'exceptionfinal function getFile(); // nom du fichier sourcefinal function getLine(); // ligne du fichier sourcefinal function getTrace(); // un tableau de backtrace()final function getTraceAsString(); // chaîne formattée de trace/* Remplacable */function __toString(); // chaîne formatée pour l'affichage}?>