PHP et les try catch :: simple et propre

Dans les 10 commandements d’un bon développeur PHP objet, on retrouve la gestion des erreurs. En particulier, sur un site Web, il est préférable de voir apparaître une erreur très générique (”Une erreur est survenue, veuillez réessayer dans quelques instants ou contacter l’administrateur du site…“) plutôt qu’une grosse “Fatal Error…” qui en plus affiche une partie de l’arborescence du site… En fait impossible de catcher une fatal error ou une parse error directement, le principe est d’anticiper l’erreur en soulevant des exceptions( d’ailleurs j’ai entendu quelque part qu’avec PHP6 il sera possible d’attraper les fatal et les parse error… ça pourra être pas mal).

Pour éviter ça, il y a une méthode très simple : les try catch. Ils permettent “d’attraper” des exceptions et d’adapter le comportement d’une applications en fonction des erreurs que l’on peut rencontrer.

Par exemple, une class Exemple qui prend en premier paramètre un numeric qui ne doit pas être négatif :

class Exemple
{
  private var1;
  private var2;

  public function __construct($param1,$param2){
    if( !is_numeric($param1) || $param1 < 0 )
      throw new Exception('Erreur dans la class Exemple : le premier paramètre doit être numeric et supérieur à 0');
    $this->var1=param1;//on est maintenant certain de son type et de son signe
    $this->var2=param2;
  }
}

Ensuite, lorsque l’on va utiliser la classe Exemple on pourra faire :

try{
  $exmple = new Exemple( 3, 4);
  $exmple = new Exemple( -2, 10);
}catch(Exception $e){
  echo $e->getMessage();
}

Le premier “new Exemple” va bien se passer puisque le premier paramètre n’est pas inférieur à 0. Par contre lors du deuxième, une exception va être “catchée” et ce sont les instructions contenues dans le “catch” qui vont être exécutées.
Ici, $e->getMessage(); va retourner le message défini dans le constructeur de la class Exemple. De le même façon on aurait pu faire $e->getLine() pour récupérer la ligne de l’exception. Aussi, on aurait pu en plus utiliser la fonction error_log() pour s’envoyer une notification par mail contenant le message de l’exception, la date…

En fait on ne fait qu’utiliser les méthodes de classe Exception de PHP, qui peut-être étendue pour personnaliser la gestion des exceptions et par exemple l’affichage des messages. Si mon mini tuto-exemple ne vous suffit pas ou si vous avez rien compris vous pouvez aller voir par ici

Partager cet article :
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google
  • blogmarks
  • Pownce
  • Reddit
  • Scoopeo
  • Slashdot
  • StumbleUpon
  • Technorati
  • TwitThis
  • Wikio

Laisser un commentaire