JeuWeb - Crée ton jeu par navigateur

Version complète : [Résolu] Savoir qui appelle une méthode
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Pages : 1 2
Bonjour à tous,

Dans le cadre du développement de mon jeu, j'ai une méthode d'une classe, et je cherche à savoir quelle méthode de quelle classe appelle celle-ci, lorsque elle est appelée.

Par exemple, il faudrait que cette fameuse méthode puisse savoir si c'est Méthode1 de Class2 ou MéthodeX, de la classe X, qui l'a appelée.

Je ne veux pas rajouter d'arguments à ma méthode du genre
function machin(..., ..., ..., $appelant)

J'ai cherché sur google mais je n'ai trouvé aucune méthode propre 2
Je pense que c'est tout simple, mais impossible d'y arriver, donc je compte sur vous!

Merci d'avance 2
À ma connaissance je crois pas que sa soit possible comme sa...mais sa m'intéresse vraiment donc je vais attendre une réponse avec toi 2
salutations
peut-être du côté de Réflexion :
Citation :PHP 5 introduit API de réflexion complète qui permet de faire du reverse-engineering sur les classes, les interfaces, les fonctions et les méthodes tout comme les extensions. L'API de réflexion permet également d'obtenir les commentaires de la documentation pour les fonctions, les classes et les méthodes.

http://www.php.net/manual/fr/language.oo...ection.php
Merci de ton lien, ça me fait de la lecture...

Je saisis pas trop, pourtant ça doit crever les yeux, comment je fais grâce à Refléxion pour savoir "qui" a appelé ma méthode? Parce pour moi ça sert juste à avoir des infos sur des fonctions, des classes... Même si ça ne sert qu'à ça, c'est quand même utile 2

Donc, pourrais tu m'expliquer comment s'en servir pour résoudre mon problème?
Je viens de faire pour moi.
J'utilise les Constantes magiques.
J'ai créé une classe log pour enregistrer dans un un fichier XML toutes mes requêtes à la BDD et aussi mes messages de debug.
voilà comme j'appelle la méthode.

    Code PHP
$mylog = new log('logs');
$mylog->write($id_joueur,'MAJ Production Gisement' ,$query,array(__METHOD__, __LINE__));


$query représente ma requète mysql
array(__METHOD__, __LINE__) représentent la méthode de la classe où j'ai fais appel à ma classe log et à la ligne où elle se trouve.

Voici le résultat du fichier XML
    Code XML
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<logs>
  <log>
    <date>20-06-2009 19:37:00</date>
    <nom>MAJ Production Gisement</nom>
    <page>/dev/jeu.php?mod=production</page>
    <methode>gisement::Afficher_Production_Gisement Ligne :417</methode>
    <requete>UPDATE gisements SET prod_jour = '100000', reste_brut=reste_brut-'2621', dern_tsp_prod_giss = '2009-06-20 19:37:00', reste_cuves=reste_cuves+'2621' WHERE id_gisement = '1'</requete>
  </log>
</logs>


J'espère que cela t'aidra.
Cordialement
Oui, j'avais pensé à cette solution mais le must serait de savoir qui appelle ma méthode au sein de celle-ci, sans arguments en plus.

Sinon, je vais appliquer cette solution, merci 2
J' ai une méthode qui log différentes erreurs, Sql ou autres. J'ai besoin de connaitre au sein de cette méthode quelle autre méthode a géneré l'erreue, sans modifier mon code compte tenu des dizaines de méthodes qui peuvent appeler celle de gesrion des erreurs.

C' est surtout pour eviter de modifier toit mon code, et parce que je trouvais ça propre.
debug_backtrace() 34 (fourni la pile complète)
@Oxman, je suis pas sûr de bien comprendendre, mais il me semble que c'est attendu, genre : impossible de se connecter à la BDD, ou problème de lecture du cache...

@Wild-D, je vais regarder du côté de cette fonction, merci 2
Utiliser debug_backtrace() pour de l'opérationnel est la pire idée possible, question performance c'est terrible, et en place cette fonction comme son nom l'indique est à usage de débuggage, on ne peut donc certainement pas s'appuyer dessus pour de la prod...

Ceci étant dit, vu que ta fonction a pour rôle de logger des erreurs, elle est plutôt hors du flux normal, et plutôt destinée à du débuggage justement. Donc dans ce cas cela semble justifié 16
Pages : 1 2
URLs de référence