2010-06-23 100 views
3

我不時遞給我一些臃腫的,沒有記錄的錯誤PHP代碼。我有幾個工具可以儘快修復這些代碼。找出函數的來源?

有一件事我不知道該怎麼做,偶爾會導致我的悲痛是找到一個函數的位置(在哪個文件中定義)。請注意,我不想知道中函數的名稱爲

比如我希望能夠做到這一點:

//file1.php 
function foo(){ 
    echo 'bar'; 
} 

//file2.php 
where_is_function('foo');//error 
include('file1.php'); 
echo where_is_function('foo');//outputs'file1.php' 

回答

11

讓自己一個很好的IDE,比如netbeanseclipse。它們具有查找函數聲明的功能,還可以查找這些函數的用法(在重構下)。

我個人使用netbeans。我只需要ctrl-click上的函數名稱&netbeans將找到函數的定義位置,並自動爲我打開文件。

+2

+1 Ctrl +單擊在NetBeans中非常方便的功能=) – 2010-06-23 00:59:29

+1

比方說,我已責成由客戶端做了幾個補丁到他們在測試服務器上的一些代碼。他們給我的FTP信息,我去解決它。我發現下載所有文件很麻煩,並且使用IDE在本地進行設置(通常,我將如何使用IDE - 本地/存在於本機上的所有文件)。我可以使用IDE(最好是NetBeans)嗎? – Cam 2010-06-23 01:05:10

+1

Netbeans允許你通過ftp設置遠程項目,因爲這個原因 – 2010-06-23 01:07:44

2

試試這個:

function getFunctionLocation($fname) { 
    $includeFilesString = implode(" ", get_included_files()); 
    return system("grep 'function $fname' $includeFilesString -l");   
} 

但如果它是隻爲開發目的,它應該是,然後只需運行

的grep -r 「功能functionName」 *

從基本目錄

4

grep或類似grep的工具。我更喜歡ack,這使默認情況下輸出更容易閱讀並忽略版本控制文件。我非常喜歡這些工具來限制自己在臃腫,點擊率較高的IDE中編碼。無論如何,以這種方式尋找事物對我來說總是比Eclipse更好。

要使用grep,您需要cd到基本目錄,然後遞歸grep目錄的內容爲函數名稱,可能包括關鍵字來定義一個函數。就像這樣:

cd project/ 
grep -Rn "def wallace(" . 

確認是這樣的:

cd project/ 
ack "def wallace(" 
+1

@Andrey - 因爲你說了一些有趣的事情而高舉你。你不認真吧? – jeffcook2150 2010-06-23 01:17:07

+0

Vim是我的開發環境,所以這正是我如何找到功能。沒有必要是尖刻的,cookiecaper。 – 2010-06-23 01:37:36