2012-07-17 75 views
1

可能重複:
How to find out where a function is defined?PHP函數位於哪裏? (如在哪個文件)

我有很多類,庫和助手一起工作一個相當複雜的面向對象的PHP項目。

在調試的時候,我有時會發現很難找到哪個特定函數的實例在不同的文件或類中存在時使用,我不知道哪個類或庫包含在內,而無需查看整個代碼這點。

我在想,如果有一個語言結構,功能或甚至一個外部工具(例如調試器),可以幫助我準確地定位在哪個文件,並在其上線是位於一個特定的功能。

E.g.是這樣的:

moditem(25); // How I call the function usually 
echo locate_function('moditem'); 

要顯示這樣的:

Function moditem() is located in file: lib/users.php, line 234. 

這裏有一個片段:

... 
return TRUE; 
} 

function moditem($id){ 
    $modify = $this->modify($id); 
    return $modify; 
} 
... 

我的IDE有辦法帶我到函數聲明,但它會很困惑當我有20個具有相同名稱的函數版本的文件時。

+1

我使用NetBeans IDE,它有一個驚人的內置搜索功能,可以做你想做的。 – Adi 2012-07-17 13:21:10

+0

get_included_files();將顯示 – Waygood 2012-07-17 13:21:50

+3

你推斷,你有很多文件相同的功能做同樣的事情你包含的文件?如果是這樣的話,你會遇到一個架構問題,如果問題得到解決,可能會解決你所問的副作用。 – martynthewolf 2012-07-17 13:22:01

回答

13
$ref = new ReflectionFunction('moditem'); 
echo $ref->getFileName(); 

http://php.net/reflectionfunction和類似的相關思考方法。

+4

你和你的_fancy_函數:-P – Neal 2012-07-17 13:22:58

+0

@Neal你和你的魔法常量。 :P – deceze 2012-07-17 13:24:13

+0

只是想補充一點,您還可以使用$ ref-> getStartLine()來獲取函數在其特定文件中啓動的確切行。 – 2012-07-17 13:37:47

0

通常在IDE中,您可以按CTRL + CLICK,它會帶您進入函數聲明。

或者,如果你只是想調試輸出可以在功能做到這一點:

echo __FILE__ . ":" . __LINE__; 

Here are the docs on the magic constants

+2

這雖然不會解決問題:只是告訴你哪一行和文件中的echo語句是。如果他可以將其放在他的職位上,他可能已經知道它的位置。:-) – MatsLindh 2012-07-17 13:28:57

+0

@fiskfisk哈哈我說的是把它放在**所有**版本的功能。 – Neal 2012-07-17 13:36:47