Je viens envahir le forum PHP 5 maintenant
Eh oui, j'ai passé le cap PHP 4 -> PHP 5 !
Bon niveau objet, c'est le jours et la nuit hehe. Comment j'ai pu faire de le résistance à PHP 5 ... Vraiment trop con moi ...
Je découvre donc toutes les petites astuces de PHP 5, dont les exceptions. Et je me casse les dents à mettre à jours mon Framework ...
Alors voilà mon problème. En PHP 4, je mettais fait une méthode static pour mon Framework, Fw::raiseError(message, code, arguments), qui lançait une erreur PHP (print, return, trigger ou die, ça dépend le niveau d'erreur qu'on a choisit).
Parfait, mais au niveau des erreurs c'était pas le top, car il ne mettait pas la ligne où avait été déclarée l'erreur mais la ligne où la fonction retournait l'erreur (et là, j'ai perdu 70% de mon auditoire lol). Je m'explique, je veux afficher une erreur ligne 70 du fichier Foo.php avec Fw::raiseError(). La ligne qui va s'afficher, sera la ligne depuis laquelle a été lancé trigger_error (par ex) dans le fichier contenant cette méthode. Donc le numéro de ligne et le fichier sont complètement faux.
Je découvre alors les exceptions, c'est magique ces trucs là.
Un simple, try { throw new Exception(message, code); } catch ( Exception $e ) { echo $e->getLine ou $e->getFile } suffit pour résoudre le problème.
Mais j'utilisais mon raiseError de cette façon là :
if(empty($var))
return Fw::raiseError('Attention, erreur !', 7);
Et avec les exceptions :
try {
if(empty($var))
throw new Exception('Attention, erreur !', 7);
}
catch(Exception $e) {
echo $e->getCode . ' ' . $e->getMessage() . "\n";
}
Vous conviendez avec moi que l'exception est plus lourde en écriture. Mais que le résultat est celui espérer.Comment réduire l'écriture ? Pour finir en 2 lignes par exemple.
Dans Zend Framework, j'ai aperçu une fois le throw new Zend_*_Exception(...); sans try { } catch () { }. Je pige pas comment ils font ^^
Enfin bref, une piste, un indice ? Merci