2013-09-26 4 views
0

Voici ce que je veux faire: Je veux être capable de déboguer mon application de manière agréable et propre.Méthode statique pour retourner la classe et la méthode dans laquelle il est réellement utilisé

J'ai ce html statique :: debug ($ var) que je voudrais retourner la classe et la méthode, il est utilisé dans plus le nom de la variable et son contenu, sans connaître le nom de la classe, il sera utilisé à l'avance.

Si je _ CLASSE _ ou getClass() renvoie le code HTML de classe où il a été instancié. Je voudrais retourner la classe et la méthode où elle a été utilisée.

Un exemple, ce n'est pas le code réel:

class HTML 
{ 
    static function debug($var) { 
      echo "<pre style=\"border: 1px solid #000; height: {9em}; 
        overflow: auto; margin: 0.5em;\">"; 

      echo '<b><u><font color = brown> In '.__CLASS__.'</u> : </font></b>'; 

ou

  echo '<b><u><font color = brown> In '.get_class($this).'</u> : </font></b>'; 
      var_dump($var);  
      echo "</pre>\n"; 
    } 
} 

Class MyClass 
{ 
     function myMethod() { 
     $variable = 'my_temp_var'; 
     html::debug($variable); 
     } 
} 

Voilà, merci.

Répondre

0

Ce n'est pas possible de faire, et c'est un signe que vous allez dans le mauvais sens. Une méthode ne devrait jamais avoir besoin de savoir qui l'a appelé; s'il a besoin de varier son comportement, alors dites-lui comment utiliser les arguments. OK, j'ai menti: techniquement, est possible à travers debug_backtrace, mais c'est une solution qui ne devrait jamais être utilisée dans le code de production. Mais il semble que dans votre cas, c'est exactement ce que vous voulez: imprimer des informations de débogage.

0

Que diriez-vous d'envoyer en tant que paramètre supplémentaire à la méthode de débogage la classe appelante? Comme:

html::debug($variable,$this); 

puis utilisez get_class($classReceived)

0

La seule façon que je peux penser à faire serait d'utiliser le callstack. Je ne pense pas qu'il y ait autre chose en PHP pour faire ce que vous voulez? Peut-être tort.

Donc, si vous deviez utiliser quelque chose comme ..

$calledFrom = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 1); 

Cela vous donnera un tableau de l'entrée précédente callstack. Ce n'est vraiment pas idéal pour un certain nombre de raisons, mais cela résoudra votre problème.

Note: Le dernier paramètre est la limite, et je crois que c'est 5.4 seulement. Supprimez si vous utilisez une version antérieure à celle-ci. Voir ici pour les documents complets et la sortie: http://php.net/manual/en/function.debug-backtrace.php

Questions connexes