IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Où est déclaré un objet ?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 242
    Points : 94
    Points
    94
    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

  2. #2
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    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

  3. #3
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    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

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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).

  5. #5
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    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...

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    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).

  7. #7
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    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

  8. #8
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    oui voila c'était l'objet de ma question...

  9. #9
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    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.

  10. #10
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2009, 14h46
  2. [POO] erreur IE : valeur Null ou n'est pas un objet
    Par An0nyme dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 25/03/2009, 15h40
  3. Réponses: 2
    Dernier message: 13/10/2007, 01h55
  4. Réponses: 1
    Dernier message: 14/02/2007, 09h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo