2010-03-08 32 views
0

我想弄清楚如何知道對變量做了什麼。找到哪些函數被調用(從變量的角度來看)

下面是一個例子:

function a($hello) { 

$out .= strtoupper(ucwords(strtolower($hello))); 
return $out; 

} 

echo function_trace('$hello') // returns array(strtoupper,ucwords,strtolower) 

謝謝! 馬特

+0

在你的例子中,對$ hello「完成」的唯一情況是調用strtolower()。 ucwords和strtoupper被匿名返回值調用,而不是$ hello。使用Xdebug + Kcachegrind進行分析可能會產生有用的輸出,但是,取決於您嘗試實現的目標。 – 2010-03-08 06:00:12

回答

5

有沒有一種簡單的方法來做到這一點,因爲變量不存儲「狀態」或「歷史」。堆棧跟蹤(您可能從中獲得靈感)是可能的,因爲它們是從現有的執行堆棧生成的,爲了能夠正確解開函數調用鏈,必須存儲該堆棧。

此外,您的示例正在嘗試跟蹤函數參數 - 但該參數變量僅在函數的範圍內定義。試圖在函數外面引用它會導致解釋器不知道你想要表示的變量 - 它會認爲你正在尋找一個全局範圍的$hello,而不是在函數中用作參數的變量。

0

這是不可能做到你要求什麼了,但是也許如果你對這個函數追蹤所期望的事情有了更多的瞭解,我們可以給出一些建議?