Depuis PHP5, on peut utiliser les exceptions. "Exceptions" est une classe intégrée à PHP5, que l'on peut étendre à d'autres classes, et qui permet de mieux gérer les erreurs d'un programme. Grace à l'utilisation de l'héritage et aux fonctionnalités de la POO, on peut rapidement créer un puissant outil de gestion des erreurs.
Comment allons nous faire ?
Dans mon article précédent, sur la POO en PHP5, je fournissais une classe que j'ai nommée myUpload. Dans cette classe, j'ai géré les erreurs manuellement, mais ça ne me convenait pas. Je vous la poste donc en page 3 avec les corrections pour que les erreurs soient gérées sous forme d'exceptions. Je vous invite à vous préparer sur la POO en amont, car les exceptions ne s'utilisent QU'EN PHP5.
L'instanciation de la classe
Pour déclarer une erreur, c'est très simple: on instancie la classe myException (disponible en deuxième page) au moment ou l'on déclare l'exception (ou l'erreur)
<?php
/**
* Vérifie l'existence d'un dossier
*
* <p>Teste l'existence d'un dossier,
* renvoie une erreur si le dossier est introuvable</p>
*
* @name myUpload::testDir()
* @param $dir
* @return string
*/
private function testDir($dir) {
// la fonction is_dir teste l'existence d'un dossier
if (is_dir($dir)) {
// si le dossier existe, j'applique la valeur $dir
// à la propriété $this->dir
// lorsque nous lanceront la copie de fichier,
// nous rappelleront la propriété $this->dir
$myDir=$dir;
}
else {
// si il y a une erreur lors du paramétrage,
// je déclare une exception
throw new myException ('Le dossier ' . $dir . ' n\'existe pas');
}
// $myDir est la valeur retournée (string)
return $myDir;
}
?>
Le Try et le Catch
Try ne vient pas sans Catch, Catch n'existe pas sans Try. Tout simplement :
Try (essaie ça) ma fonction, si ça ne fonctionne pas : Catch (attrape) l'erreur.
<?php
// on instancie la classe
// on execute les methodes dans le même Try
// on tente d'instancier la classe
// et de la paramétrer
try {
$myUpload->setMyDir("textes");
}
// Une exception est levee uniquement si une erreur est trouvee
catch (MyException $e) {
echo $e -> getError();
}
?>