|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : juin 2004 Messages : 257 ![]() |
Bonjour,
Existe t'il un moyen de savoir dans quelle page ou à partir de quelle classe fille est appeler une méthode?. Je m'explique : je suis en train de développer une classe parente qui gère les accès à la base de données avec MDB2 (connect, query, exec...) en passant en paramètre la requête SLQ. Dans chaque méthodes, je gère les erreurs en envoyant automatiquement un mail au support technique. Dans ce mail, j'aimerai mettre le nom de la page et/ou de la classe fille à partir de laquelle on a déclaré l'objet et appelé la méthode afin de retrouver plus rapidement la requête SQL qui pose problème. Existe un moyen de retrouver cette information automatiquement ou faut t'il que je prévoie de mettre cela en paramètre de mon constructeur? Merci de votre réponse |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Inscription : octobre 2005 Messages : 427 ![]() |
get_class te renvoie la classe de ton objet.
Donc à priori faire un get_class($this) devrait te donner l'info que tu cherches.
__________________
Linio |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : juin 2004 Messages : 257 ![]() |
Si je ne me trompe, get_class($this) va me donner le nom de la classe dans laquelle je travaille, or ce que j'aimerai faire c'est obtenir le nom de la classe voir méthode dans laquelle je fais appelle à la classe.
Je vais essayer d'être plus précis. j'ai une classe parent dans laquelle j'ai une méthode setAlerte() et query($sql) J'appelle la méthode setAlerte lorsque la méthode query($sql) génère une erreur. J'ai une autre classe fille qui hérite de parent dans laquelle j'ai la méthode users() qui va chercher les utilisateurs de la table user. Pour cela, dans users() j'appelle la méthode parent query($sql). Dans cette même classe fille, j'ai une autre méthode contact() qui fait appelle à la même méthode parente query($sql). Maintenant , j'aimerai trouver un moyen pour que lorsque Query($sql) renvoie une erreur, dans la methode setAlerte() je puisse savoir si c'est la méthode users() ou contact() qui appeler query() qui a un problème. J'epère avoir été plus claire cette fois-ci merci de votre aide |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 2 288 ![]() |
ca dépend. setAlerte() est appelée automatiquement dans query() en cas d'erreur ou pas?
Si, non, tu peux faire un truc de ce style Code :
setAlert(__FILE__, __CLASS__, __METHOD__, __LINE__, $inMessage); |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : juin 2004 Messages : 257 ![]() |
oui setAlerte() est appelé automatiquement dans query() en cas d'erreur.
J'ai essayé cette avec "__FILE__, __CLASS__, __METHOD__, __LINE__" mais elle m'oblige appeler une méthode en plus de la methode query ce que j'aimerai eviter si c'est possible... |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 2 288 ![]() |
Le meilleur moyen que j'ai trouvé dans ton cas (vu que j'ai le meme genre d'erreurs) c'est d'utiliser les exceptions.
Dans ta méthode query() si une erreur apparait, tu crées une exception et tu vas pouvoir appeler la méthode getTraceAsString() qui va te renvoyer la pile d'appel de tes fonctions (en gros toutes les fonctions par lesquelles t'es passé jusqu'à arriver à cette erreur). |
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : octobre 2005 Messages : 427 ![]() |
Je vois pas comment tu peux faire sans rappeler une fonction.
Le mieux me semble de mettre un flag en sortie et de faire le traitement dans l'objet qui a appelé ta méthode (parce que je suis pas persuadé que tu puisses connaitre l'objet appelant d'une méthode).
__________________
Linio |
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : juin 2004 Messages : 257 ![]() |
oui voila c'était l'objet de ma question...
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 2 288 ![]() |
et bien tu as ta réponse !
Soit tu utilises les exceptions directement dans query(), soit tu traites l'erreur au niveau parent (mais ca ne regle pas le probleme qui est "qui a appelé cette fonction 'parent ?") mais qui est moins lourd a gérer que les exceptions. |
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Inscription : juin 2004 Messages : 257 ![]() |
et bien merci de vos réponses, cette fois je suis fixé...
Je vais donc mettre en place une méthode setmessage() qui devra être appeler obligatoirement avant de passer le querry. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com