我想弄清楚如何知道對變量做了什麼。找到哪些函數被調用(從變量的角度來看)
下面是一個例子:
function a($hello) {
$out .= strtoupper(ucwords(strtolower($hello)));
return $out;
}
echo function_trace('$hello') // returns array(strtoupper,ucwords,strtolower)
謝謝! 馬特
我想弄清楚如何知道對變量做了什麼。找到哪些函數被調用(從變量的角度來看)
下面是一個例子:
function a($hello) {
$out .= strtoupper(ucwords(strtolower($hello)));
return $out;
}
echo function_trace('$hello') // returns array(strtoupper,ucwords,strtolower)
謝謝! 馬特
有沒有一種簡單的方法來做到這一點,因爲變量不存儲「狀態」或「歷史」。堆棧跟蹤(您可能從中獲得靈感)是可能的,因爲它們是從現有的執行堆棧生成的,爲了能夠正確解開函數調用鏈,必須存儲該堆棧。
此外,您的示例正在嘗試跟蹤函數參數 - 但該參數變量僅在函數的範圍內定義。試圖在函數外面引用它會導致解釋器不知道你想要表示的變量 - 它會認爲你正在尋找一個全局範圍的$hello
,而不是在函數中用作參數的變量。
有沒有在PHP這不正是你想要的東西沒有掛鉤,但是你可以得到debug_backtrace調用棧():
這不是_exactly_他想要什麼。 – zneak 2010-03-08 03:30:00
這是不可能做到你要求什麼了,但是也許如果你對這個函數追蹤所期望的事情有了更多的瞭解,我們可以給出一些建議?
在你的例子中,對$ hello「完成」的唯一情況是調用strtolower()。 ucwords和strtoupper被匿名返回值調用,而不是$ hello。使用Xdebug + Kcachegrind進行分析可能會產生有用的輸出,但是,取決於您嘗試實現的目標。 – 2010-03-08 06:00:12