編譯器首先求出語句右半部分的值(即等號右邊的所有內容)。在一些編程書籍中,將此表示為語句的 RHS (右半部分)。恰恰正是語句的這一部分常常會引發錯誤。如果使用的語法不正確,就會出現解析錯誤。
解析錯誤
Parse error:解析錯誤,unexpected T_WHILE in c:\program files\apache group\apache\htdocs\script.php on line 19
每次確定了前一錯誤時,解析錯誤一個接一個地不斷出現。因為PHP在第一個解析錯誤之後就停止執行腳本,調試並糾正這一系列的錯誤往往會讓人覺得特別厭煩。
而且,解析錯誤具有很少的資訊,幾乎不報告錯誤所在的行號。具體原因就是當出現錯誤時,編譯器判定好幾行的語法看起來應該是有效的,直至遇到無效的語法,最可能的情形就是運算式中使用了預定義的字詞,例如;
while = 10; // Bad ? while 就是一個預定義字詞,不能分配給一個值
錯誤位於"$b ="一行(在語句的末端缺少分號),所以錯誤應該是"解析錯誤:第3行缺少分號"對吧?而不應該依據解析器判定的:
Parse error: parse error, unexpected T_IF in c:\program files\apache
group\apache\htdocs\ereg2.php on line 4
將產生下列錯誤:
Parse error: parse error, unexpected $ in c:\program files\apache
group\apache\htdocs\ereg2.php on line 9
由於函數 UselessFunction 沒有使用大括弧( } )來結束,PHP編譯器不斷查找表示結束的大括弧直至到達檔末尾為止。因為編譯器未找到一個匹配的大括弧,就會報告檔末尾處有錯誤。
如果正確地反映了代碼的層次結構,錯誤資訊就會變得非常明顯。如果沒有標明代碼的層次結構,那麼最後要想查清楚到底忘記了什麼也會變得幾乎是不可能的。所以,請記住,一定要標明代碼的層次結構。Tab鍵可以很容易地實現這一點。對後續的開發人員來說,把握代碼框架並對其進行修改也會更容易一些。
MySQL 錯誤
另一極其令人討厭的錯誤資訊就是最常見的MySQL錯誤,這常常使 PHP新手感到頗為頭疼:
Warning: Supplied argument is not a valid MySQL result resource in...