2009-08-24 77 views
4

編寫PHP代碼時,如果您不記得以前編輯過哪些部分,可能會導致一些確實難以找到解析錯誤。我有興趣瞭解任何有見識的方法來尋找你可能發現的這些錯誤。狩獵PHP解析錯誤

例如:意外「;」上線預計在T_FUNCTION 877 someclass.php

這一種錯誤指出,你有意想不到的;在包含877行PHP代碼的類中,錯誤肯定不在最後一行。錯誤消息是否有誤導性?在哪裏以及如何開始尋找,除了從頂部開始,並試圖找到掃描每一行代碼的有問題的地方。

+0

當你在一個文件中有877行代碼時,你真的應該重構你的代碼:) 擁有較小的文件也可以更容易地追蹤這種類型的錯誤。 – 2009-08-25 14:13:59

+0

當然,有很多方法可以最大限度地減少這些問題的發生機會,這是最糟糕的情況。 :) – Fuu 2009-08-25 17:54:33

回答

5

首先,我會使用一個編輯器,當你輸入你的代碼時,動態地突出顯示PHP錯誤,例如,Eclipse PDT(這是相當強大,主動維護和免費的,而OSS ) - 它將幫助幾乎立即檢測到一些錯誤,而無需執行代碼。

如果您將它與它的Subversion插件一起使用(在Eclipse中集成SVN訪問),它也可以顯示它所謂的「快速差異」:尚未提交給SVN的修改行的邊距是突出顯示 - 它有助於檢測自上次提交後更改的內容。


但是請注意,是,因爲它是基於Eclipse,需要一個相當強大的計算機(我說的雙核配2GB內存是必需的,1 GB通常是不夠的,如果你也想同時^^)


然後,當你在PHP是編程相當長的一段時間,你可能能夠理解這些消息更快/更好的使用一些其他的軟件,並知道在哪裏看起來;-)

2

如果您正在使用某個控制版本系統,您可以查找實際版本和舊版本文件/類之間的差異。

1

儘可能頻繁地運行代碼,因爲你寫它。每次執行之間添加的代碼行越少,新錯誤的搜索空間就越小。

如果自上次加載頁面以來我只編輯了5行877行文件,發現錯誤可能比編輯100行的速度快得多。

2

這類錯誤通常由if的一個「{」,開關,while,do,function,class等等未關閉。

2

你也可以做一個常見的語法檢查,不管你用什麼編輯:

 
php -l file.php 

請注意,我用的是「頻繁」。如果你使用vim,你會發現在你的.vimrc文件下面有用:

 
map <F12> <ESC>:!php -l %<CR> 

隨時即時檢查語法只要按下F12。

1

我發現PHP的語法錯誤報告很不錯,但由於語法錯誤幾乎可以是任何東西,因此顯然限制了可能的內容。一般來說,你的錯誤可能接近報道的線路。例如,在這種情況下,我會認爲你已經做了這樣的:

class Foo { 
    function blah() { 
    }; 
} 

或者是:

class Foo { 
    protected $foo;; 
} 

分號是在這兩個環境的違法行爲。

0

Zend Studio有一個很棒的調試工具,它允許您設置各種選項,包括設置斷點,遍歷代碼以及檢查變量/參數。當然,所有這一切都伴隨着一個價格。 =(