Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Dans la section Zend_Cache du livre Zend Framework, Bien développer en PHP des Cahiers du programmeur, les auteurs proposent un script facilitant l'utilisation de Zend_Cache.
Il construisent donc leur propre librairie pour compléter Zend Framework. Jusque là pas de problème, le script a l'air plutôt sympa.
En revanche, dans leur script ils appellent Zfbook_Cache_Exception, or cette classe ne contient que ça :
<?php /** * Exception personnalisée pour le cache * * @package zfbook * @subpackage cache */ class Zfbook_Cache_Exception extends Zfbook_Exception {}
Et Zfbook_Exception contient ça :
<?php /** * Exception personnalisée racine des composants zfbook * * @package zfbook * @subpackage exception */ class Zfbook_Exception extends Exception {}
Du coup je ne comprends pas bien le truc ... Quelle est cette classe Exception ? Pourquoi faire des classe vides ?
Si quelqu'un pouvait me répondre ... Parce que là je suis un peu perdu ...
Merci d'avance.
Simon
Dernière modification par Smon (13-04-2010 12:50:48)
Hors ligne
Bonjour,
Cela permet de structurer tes exceptions et de pouvoir tester le type d'exception que tu catch et donc de réagir en fonction.
Très souvent les classes d'exception n'implémentent rien de particulier, et le plus souvent seulement des constantes qui définissent les différents messages que le développeur pourra envoyer lorsqu'il lève une exception.
Quoi qu'il en soit, il est conseillé de respecter cette pratique et de toujours remonter une exception particulière pour chaque composant. Sauf parfois les types d'exceptions qui sont proposés nativement par PHP ou maintenant la SPL, qui peuvent être bien utiles.
Grâce à ce type de fonctionnement, il est bien plus facile de débugger et de logger correctement le déroulement des opérations
A+ benjamin.
Dernière modification par Delprog (12-04-2010 15:22:59)
Hors ligne
S'un point de vue pratique ça permet d'avoir un code comme le suivant :
try { // un super code } catch (Zfbook_Cache_Exception $e) { // on traite l'exception liée à un problème dans le cache de Zfbook } catch (Zend_Exception $e) { // on traite l'exception liée à quelque chose dans le framework } ...
Ca permet de traiter certains types d'erreur dans le catch et de laisser remonter les erreurs qu'on ne veut pas traiter ici (il peut y avoir un autre try/catch plus haut dans le code pour d'autre types d'exceptions).
A+, Philippe
Hors ligne
Oh, ok.
Mais ça fonctionne même si la classe est complètement vide comme dans le code que j'ai cité ci-dessus ? Il sait automatiquement faire la différence ? (désolé je suis un petit noob de l'objet et de Zend ...)
Et c'est quoi la classe Exception ? Parce qu'il me semble qu'il faudrait écrire Zend_Exception non ?
Hors ligne
C'est le principe de l'héritage :
PHP fournit une classe Exception
Zend_Exception hérite de Exception
Zfbook_Exception hérite (sans doute, je n'ai pas le livre) de Zend_Exception
Donc toutes ces classes peuvent utiliser les méthodes de la classe de base Exception.
Ensuite pour faire la différence, tu as instanceof (un mot clé php)
if ($e instanceof Zend_Exception) {...}
cette condition te permet de savoir si $e est une instance de Zend_Exception ou Zfbook_Exception (ça prend en compte l'héritage). On appelle ça le polymorphisme (en programmation objet) : si $e est une instance de Zfbook_Exception , c'est aussi une instance de Zend_Exception : ça a plusieurs "formes".
A+, Philippe
Hors ligne
Ben en fait Zfbook_Exception hérite directement de la classe Exception ...
Ça veut dire que je dois créer un fichier Zfbook_MaClasse_Exception pour chaque classe que je créé ? (si je veux faire du débogage)
Hors ligne
Bon, en tout cas merci à tous pour votre aide
Hors ligne
Non, tu n'es pas du tout obligé, en général je n'ajoute des exceptions spécifiques que pour des points assez particuliers et à problème.
Sinon, j'utilise une classe d'exception générale que j'ai créé pour tout mon projet qui me permet de savoir que c'est une exception à moi et pas à quelqu'un d'autre qui vient d'être levée...
Bref sur un projet complexe, j'aurai créé 2 ou 3 classes d'exception en général...
A+, Philippe
Hors ligne
Pages: 1