Pour reprendre mon collègue Sarthois Sadeq que je cite :
J'aimerai avoir un peu plus de précisions sur un fonctionnement théorique que je n'arrive pas à cerner.L'idéal en programmation objet est de s'aligner au niveau de l'objet à programmer pour concevoir le comportement de ses méthodes vis-à-vis des exceptions qui devraient provoquer ou pas son arrêt.
Le capteur d'exception try .... catch () est dans ce cas plus intéréssant que les die et exit
En principe l'algorithme de gestion des exceptions dans une méthodes qui manipule des commandes génératrices d'erreurs est le suivant :
PHP:
class foo {
function foo (args) {
//travailler tout en observant une erreur
try {
//le travail à faire
}
catch (MyException $e) {
//capteur de try : reçoit l'objet erreur et le nomme '$e'
//programmer ce que vous devez faire de l'erreur $e
//Peut être retourner l'objet $e à l'appelant :
return $e;
//Peut être retourner un False pour signaler un echec de la méthode
return false;
//Peut être afficher l'erreur survenue: (déconseillé)
echo $e->getError();
}
}
L'exemple de Sadeq est pour moi tout à fait clair et ne me pose aucun probleme.
Là ou ca me pose probleme c'est dans la partie qui utilise les classes.
Voyons un exemple :
- Une classe Foo comme celle de l'exemple avec plusieurs méthodes gérant les erreurs comme indiqué dans l'exemple.
- un fichier mapage.php qui va utiliser la classe Foo.
Dans ce fichier mapage.php admettons que nous fassions un truc du genre :
* traitement lambda qui n'a rien à voir avec Foo
* on instancie Foo
* Foo->methode1
* un test sur un des attributs de foo
* foo->methode2
* un traitement qui n'a rien a voir avec foo.
Imaginon que la methode 1 de Foo remette en question totalement l'objet en lui meme (objet pas completement chargé, erreur ou autre) mais que l'on souhaite tout de meme effectuer les traitements lambda qui n'ont rien a voir avec foo ET en plus afficher qu'il y a une erreur à l'utilisateur.
Comment agiriez vous ?
Personnellement je pensais à un truc mais ca va faire du code archi moche quoi....
Voici mon exemple :
Dans la mesure ou mes methodes renvoient true en cas de succes et false en cas d'echec :
Code : Tout sélectionner
/* traitement lambda */
$foo = new Foo;
if($foo->methode1())
_____ /*test sur mon attribut et traitement annexe */
_____if($foo->methode2())
_________/*autres traitements avec foo */
_____else
_________echo 'une erreur est survenue';
else
_____echo 'une erreur est survenue';
/*traitement lambda*/
Mon exemple étant simple avec seulement deux tests ne montre pas vraiment le probleme mais imaginez que vous devez appeler 8 méthodes par exemple, cela fait au moins 8 tabulations ! soit 40 espaces bouffés (en suivant la norme de codage (1tab = 5caracteres)!
Bref, je voulais savoir comment vous gereriez cela de façon efficace et pro ?
Merci d'avance
@++
ps : désolé pour les "_" dans mon code exemple, mais phpbb n'a pas encore compris qu'il était possible d'ajouter un bbcode "tab" pour inserer 5 fois   ; m'enfin...