Accueil > Forum > > > > Throw new HOW ?
Throw new HOW ?
mercredi 30 janvier 2008 à 13:46:53 |
Throw new HOW ?

codefalse
|
Hello tout le monde ! :) Alors voila, pour mes besoins perso je me suis fait une classe AlternativException extends Exception et une classe InvalidArgumentException extends AlternativException. Mon problème, c'est au niveau du multilangage. Comment vous, dans votre configuration actuelle, vous faites pour que si vous lancez une exception genre throw new MyException ("Nom du type qui connait la grand mère du voisin INVALIDE"); @note : MyException extends AlternativException Bah si le site est en anglais, vous ayez un truc en anglais etc ? J'était partit sur une idée de constantes, faire un truc genre throw new MyException (MyException::INVALID_NEIGHBOOR_GRANDMA_NAME); Le probleme, c'est que dans AlternativException, si je veux connaitre la classe à l'origine de l'exception, bizzarement getTrace me retourne rien de valide, je doit donc faire un throw new UneException(constante, classname, methodName, File, Line); pour avoir une tracabilité complete Car ensuite je pensais faire un fichier xml avec <root> <MyException lang="fr"> <constanteValue1><!-- INVALID_NEIGHBOOR_GRANDMA_NAME -->Nom du type qui connait la grand mère du voisin INVALIDE</constanteValue1> <etc /> </MyException> <MyException lang="en">
<constanteValue1><!-- INVALID_NEIGHBOOR_GRANDMA_NAME
-->Invalid name of the guy who know the neighboor's grand ma</constanteValue1>
<etc />
</MyException> </root> et dans AlternativException, ouvrir le fichier xml, aller dans root>Class_qui_lance_exception, lang="analyse du navigateur">ConstanteValue pour récuperer la valeur et afficher un message internationalisé ! Mes questions sont donc : _ Comment paliez-vous au probleme du getTrace qui retourne rien de normal ? _Que pensez-vous de cette méthode ? En avez-vous une meilleur à proposer ? (je suis ouvert à toutes les propositions !) Merci de vos réponses :)
|
|
mercredi 30 janvier 2008 à 17:17:59 |
Re : Throw new HOW ?

coucou747
|
Réponse acceptée !
salut pour moi une exception ca ne doit pas etre lu par un internaute classique... ca s'affiche pendant le debug, ca se log en production, donc je ne vois pas l'interret de mettre une traduction sur une exception /** * @author coucou747 <coucou747@hotmail.com> * @see irc://cominweb.uni-irc.net/#programmation */
|
|
mercredi 30 janvier 2008 à 18:32:37 |
Re : Throw new HOW ?

codefalse
|
Dans ce cas est-il possible d'empecher une exception, genre si je fait un throw new myException, dans ma classe myException, est-il possible de vérifier si on est en prod ou pas, si oui, logger l'erreur, sinon lancer l'exception ?
Sinon comment faire ?
|
|
mercredi 30 janvier 2008 à 19:07:18 |
Re : Throw new HOW ?

coucou747
|
t'as des choses dans $_SERVER qui peuvent te dire si t'es en local ou pas a mon avis, l'exception doit-etre lancee en production ou pas, mais si t'es en production, il logue et ferme la page, sinon il affiche le message /** * @author coucou747 <coucou747@hotmail.com> * @see irc://cominweb.uni-irc.net/#programmation */
|
|
mercredi 30 janvier 2008 à 19:58:57 |
Re : Throw new HOW ?

codefalse
|
nan ce que je veux dire c'est admettons ce code :
class MyException extends Exception {}
class uneClass { public function uneMethode () { if (func_ger_args() > 0) throw new MyException ("Vous devez spécifier au maximum -1 arguments !"); } }
$mC = new uneClass (); $mC->uneMethode ();
Forcément, j'aurai une exception (sauf si j'ai fait une erreur dans mon code), mais comment faire pour éviter une exception si je décide de passer en production ? Est-il possible dans la class myException d'empecher l'exception de se lancer ?
La solution que j'ai trouvé la plus plausible (apres, c'est ma vision, et j'espere qu'elle sera critiquée), c'est de ne pas faire comme indiqué avant, mais comme ceci :
class ExceptionManager { // Le extends Exceptions est à voir, je sais pas si c'est possible // Sinon faire une classe à part public static fonction throw ($sExceptionClass, $sMessage, $iCode, $sClassName, $sMethodName, $sFileName, $iLineNumber) { if ($bProduction == true) Log::log ("Une erreur s'est produite le $date : $sMessage ($iCode), provenant de $sClassName::$sMethodName (); Fichier $sFileName, ligne $iLineNumber"); else throw new $sExceptionClass ($sMessage, $iCode, $sClassName, $sMethodName, $sFileName, $iLineNumber); }
Bon c'est de l'abrégé (pas de tests si la classe existe avant de l'instancier, pas de vérifications etc, c'est juste pour l'exemple) Et du coup, en reprenant le premier exemple :
class MyException extends Exception {}
class uneClass {
public function uneMethode () {
if (func_ger_args() > 0)
ExceptionManager::throw ("MyException", "Vous devez spécifier au maximum -1 arguments !", 030332, __CLASS__, __FUNCTION__, __FILE__, __LINE__);
}
}
$mC = new uneClass ();
$mC->uneMethode ();
Perso tu aurait fait comment toi ?
|
|
mercredi 30 janvier 2008 à 20:05:08 |
Re : Throw new HOW ?

coucou747
|
j'y avais pense, ta solution me semble envisageable, cependant : __CLASS__, __FUNCTION__, __FILE__, __LINE__ c'est inutile, les exceptions ont deja une trace d'appels avec ces infos /** * @author coucou747 <coucou747@hotmail.com> * @see irc://cominweb.uni-irc.net/#programmation */
|
|
mercredi 30 janvier 2008 à 20:07:41 |
Re : Throw new HOW ?

codefalse
|
Apparement la méthode getTrace de Exception ne fonctionne pas bien, j'ai jamais de bonnes valeurs ! :/
|
|
mercredi 30 janvier 2008 à 20:34:11 |
Re : Throw new HOW ?

malalam
|
Réponse acceptée !
Hello,
une exception, quand on affiche son "trace", le fait dans la méthode qui fait le throw. D'où de possible décalage. Mais le "trace" permet de remonter. C'est pour ça que moi, j'utilise toujours __LINE__, __FUNCTION__ etc. Mais dans mon throw. Parfce que ton throw est lancé dans ExceptionManager, tjrs, dans ton cas. Donc c'est cohérent, ce que tu fais. Maintenant, selon moi, une exception peut-être vue par l'utilisateur, je ne suis pas d'accord avec Coucou là-dessus. Mais c'est une question de philosophie. Quand on n'utilise pas des exceptions, mais qu'on tâche de gérer les erreurs, on affiche un message d'erreur à notre utilisateur si la connexion à la base de données à échouer quand il va sur une page, par exemple. Ben si on utilise les exceptions, pourquoi ne pas lui balancer le message de l'exception, après tout. Jez ne vois pas le problème là-dedans. On lui balance le getmessage(), ou une autre méthode destiné à l'utilisateur, et en même temps, au lancern l'exception se logge et fait les opérations qu'elle doit faire (envoyer un email à l'admin, etc...). Pour les traductions, moi j'opte dans ce cas pour le xml. Bon, codefalse, tu connais mon backoffice d'internationalisation donc tu connais le principe : je fais en effet correspondre le code de mon exception (ou sa constante en chaîne) à un tag du fichier xml d'internationalisation.
|
|
mercredi 30 janvier 2008 à 20:41:09 |
Re : Throw new HOW ?

codefalse
|
Ouep Malalam, ton i18n, je l'ai bien regardé, et je crois même qu'inconsciement je me base dessus ! :p
Pour ce qui est de l'exception, perso je dirai bien de mixer vos deux idées, à savoir si on est en prod, l'exception est caché par la class ManageException qui va pas réellement la lancer, mais en échange, elle va rediriger l'utilisateur sur une page personnalisée, qui pourra indiquer l'erreur (le message) à l'origine du probleme
Voici l'implémentation au cas ou je me serai mal exprimé :
class ExceptionManager { // Le extends Exceptions est à voir, je sais pas si c'est possible // Sinon faire une classe à part public static fonction throw ($sExceptionClass, $sMessage, $iCode, $sClassName, $sMethodName, $sFileName, $iLineNumber) { if ($bProduction == true) {
Log::log ("Une erreur s'est produite le $date : $sMessage ($iCode),
provenant de $sClassName::$sMethodName (); Fichier $sFileName, ligne
$iLineNumber"); Template::Show ('erreur.tpl', array("message"=>$sMessage, "code"=>$iCode, "classname"=>$sClassName, "filename"=>$sFileName, "linenumber"=>$iLineNumber); } else throw new $sExceptionClass ($sMessage, $iCode, $sClassName, $sMethodName, $sFileName, $iLineNumber); }
et l'auteur du fichier erreur.tpl pourra choisir d'afficher le message, la class/méthode, le fichier, etc. Ce qu'il veut divulguer à l'utilisateur.
Ca augmente le niveau de possibilités.
Qu'en pensez-vous ?
|
|
mercredi 30 janvier 2008 à 20:47:27 |
Re : Throw new HOW ?
|
Cette discussion est classée dans : classe, exception, throw, alternativexception, myexception
Répondre à ce message
Sujets en rapport avec ce message
probleme de classe en php [ par Elkaire ]
Donc voila mon probleme!!dans une premiere page je rensegne les insances de mon objet. Une fois renseigné je peux réutiliser les instances cet objet d
Parametre de ma classe connexion et connexion/deconnexion [ par sebos63 ]
Bonjour, 1. J'ai une classe de connexion et je souhaiterais savoir où il est judicieux de spécifier les paramètres d'une connexion. (Dans mon construc
template.inc [ par joedalton ]
bonjourVoila, je possede un fichier template.inc qui me permet de définir ma classe template, mais le probleme c'est que ce fichier est valable pour l
Inversion de matrice [ par VanSama ]
Bonjours, pour les besoins d'analyse d'une image, je recherche un algorithme de d'inversion d'une matrice NxN.J'ai lue beaucoup de chose sur le site d
Quand on parle de Classe [ par Tomcube ]
C'est une question très vaste,On parle de plus en plus de programmation objet. Qui dit programmation objet dit classe. D'ailleurs, c'est fou le nombre
problème de classe [ par guixyz ]
Hello! Voila je suis en train d'apprendre a me servir des classes en php. Et j'en ai fait une pour gérer mes formulaires Donc j'ai ma classe, une fcti
Pb avec classe en php, Affichage [ par matou82 ]
Je voudrais savoir comment surcharger l'affichage d' echo ou print pour une classePour avoir:$obj = new Maclass;echo $obj;Cela affiche : "Object" Je s
Classe et panier [ par romalafrite ]
http://www.phpcs.com/code.aspx?ID=12931Quelqu'un peut me dire comment récupérer le contenu du panier une fois que la sélection a été faite ?visit inte
fatal error sur chargement de class [ par fabrice_pi ]
salut à tous,j'utilise une classe PHP pour faire mes taleaux en html. depuis peu j'ai l'erreur suivante :Fatal error: Cannot instantiate non-existent
PROBLEME DE CLASSE [ par FGONET ]
Bonjour,J'ai un petit problème avec une classeJ'utilise la classe suivante :class ToolBox{var $prvId;var $prvTitre;function FillTables(){$locResult[0]
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|