2013-09-26 67 views
0

這裏是我想要做的:我想能夠調試我的應用程序很好,乾淨。靜態方法返回它實際使用的類和方法

我有了這個靜態HTML ::調試($ VAR),我會想回報的類和方法,它在使用加上不同的名稱及其內容,不知道的名字它會提前使用它。

如果我使用_ CLASS _的getClass()它返回的HTML類在那裏它被實例化。我想返回它已被使用的類和方法。

一個例子,它不是實際的代碼:

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>'; 

  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); 
     } 
} 

你去那裏,謝謝。

回答

0

這是不可能的,這是一個跡象表明你走錯了路。一個方法應該永遠不需要知道是誰調用它;如果它需要改變它的行爲,那麼告訴它如何使用參數。

好吧,我撒謊:從技術上說可能通過debug_backtrace,但這是一個永遠不應該用於生產代碼的解決方案。但是看起來你的情況正是你想要的:打印調試信息。

0

如何將調用方法作爲額外參數發送給調用類?像:

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

然後用get_class($classReceived)

0

我覺得這樣做是使用調用堆棧的唯一途徑。我不認爲PHP中有任何其他東西可以做你想做的事情?可能是錯的。

所以,如果你使用像..

$calledFrom = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 1); 

這會給你以前的調用堆棧條目的數組。由於多種原因,這並不理想,但它可以解決您的問題。

注:最後一個參數是限制,我相信這只是5.4。如果您使用的版本比此更舊,請將其刪除。

這裏查看完整文檔和輸出:http://php.net/manual/en/function.debug-backtrace.php