JeuWeb - Crée ton jeu par navigateur
[Résolu] Savoir qui appelle une méthode - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Savoir qui appelle une méthode (/showthread.php?tid=4115)

Pages : 1 2


[Résolu] Savoir qui appelle une méthode - My Hotel - 20-06-2009

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 Smile
Je pense que c'est tout simple, mais impossible d'y arriver, donc je compte sur vous!

Merci d'avance Smile


RE: Savoir qui appelle une méthode - DragonMaster - 20-06-2009

À 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 Smile


RE: Savoir qui appelle une méthode - kraddle - 20-06-2009

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.oop5.reflection.php



RE: Savoir qui appelle une méthode - My Hotel - 20-06-2009

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 Smile

Donc, pourrais tu m'expliquer comment s'en servir pour résoudre mon problème?


RE: Savoir qui appelle une méthode - tog84 - 20-06-2009

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.


$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

<?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


RE: Savoir qui appelle une méthode - My Hotel - 20-06-2009

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 Smile


RE: Savoir qui appelle une méthode - My Hotel - 20-06-2009

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.


RE: Savoir qui appelle une méthode - wild-D - 21-06-2009

debug_backtrace() ^^ (fourni la pile complète)


RE: Savoir qui appelle une méthode - My Hotel - 21-06-2009

@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 Smile


RE: Savoir qui appelle une méthode - naholyr - 21-06-2009

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é Wink