Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/11/2007, 12h11   #1
Membre du Club
 
Inscription : juin 2004
Messages : 257
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 257
Points : 64
Points : 64
Par défaut [POO] Où est déclaré un objet ?

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
epeichette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 12h20   #2
Membre éclairé
 
Avatar de Linio
 
Inscription : octobre 2005
Messages : 427
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 427
Points : 304
Points : 304
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
Linio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 13h59   #3
Membre du Club
 
Inscription : juin 2004
Messages : 257
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 257
Points : 64
Points : 64
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
epeichette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h07   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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);
dans la méthode qui appelle query() pour avoir une idée précise de l'endroit où l'appel a query() a échoué (ca te donne, le nom du fichier dans lequel tu es lors de l'appel a setAler(), de la classe, de la méthode ainsi que la ligne).
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h16   #5
Membre du Club
 
Inscription : juin 2004
Messages : 257
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 257
Points : 64
Points : 64
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...
epeichette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h36   #6
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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).
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h39   #7
Membre éclairé
 
Avatar de Linio
 
Inscription : octobre 2005
Messages : 427
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 427
Points : 304
Points : 304
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
Linio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h48   #8
Membre du Club
 
Inscription : juin 2004
Messages : 257
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 257
Points : 64
Points : 64
oui voila c'était l'objet de ma question...
epeichette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h52   #9
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h56   #10
Membre du Club
 
Inscription : juin 2004
Messages : 257
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 257
Points : 64
Points : 64
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.
epeichette est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h55.


 
 
 
 
Partenaires

Hébergement Web