debug_backtrace() 是一個很低調的函數,不多有人注意過它. 不過當我對着一個對象調用另外一個對象再調用其它的對象和文件中的一個函數出錯時,它正在一邊笑呢。php
debug_print_backtrace(), debug_backtrace() 只是前者直接打印出來了而已。查看整個程序的調用棧,用來查看瞬間函數調用棧,方便查錯。函數
若是咱們想知道某個方法被誰調用了? debug_backtrace能夠解決。debug_backtrace() 能夠打印出一個頁面的調用過程 , 從哪兒來到哪兒去一目瞭然. 不過這是一個PHP5的專有函數,好在pear中已經有了實現,http://pear.php.net/package/P... 測試
測試代碼.net
<?php class a { function say($msg) { echo "msg:".$msg; echo "<pre>"; // print_r(debug_backtrace()); print_r(print_message_class()); } } class b { function say($msg) { $a = new a(); $a->say($msg); } } class c { function __construct($msg) { $b = new b(); $b->say($msg); } } $c = new c("test");
輸出結果:debug
msg:test a.say
將debug_backtrace封裝爲一個方法,只獲取輸出類名和方法名:code
/** * 打印類的標記 * * @return string */ function print_message_class() { $backtrace = debug_backtrace(); $class_name = $backtrace[1]['class']; $func_name = $backtrace[1]['function']; $message = "{$class_name}.{$func_name}() "; return $message; }