正確理解 PHP 錯誤資訊(轉)
正確理解 PHP 錯誤資訊(轉)[@more@] 我們編寫程式時,無論怎樣小心謹慎,犯錯總是在所難免的。這些錯誤通常會迷惑PHP編譯器。如果開發人員無法瞭解編譯器報錯資訊的含義,那麼這些錯誤資訊不僅毫無用處,還會常常讓人感到沮喪。
編譯 PHP 指令碼時,PHP 編譯器會盡其所能報告它遇到的第一個問題。這樣就產生一個問題:只有當錯誤出現時,PHP 才能將它識別出來(本文後面對此問題進行了詳細描述)。正是由於這個緣故,編譯器指出出錯的那行,從表面上看來可能語法正確無誤,或者可能是根本就不存在的一行!
更好地理解錯誤資訊可以大大節省確定並改正錯誤內容所花費的時間。因此,在本文中,我將努力闡明多種不同型別的PHP報錯資訊,以及在開發過程中如何正確理解各種報錯資訊的含義。
本文中所講述的內容與您所應用的PHP的版本無關,因為本文所描述的各種錯誤並不限定於某一特殊版本的特定錯誤。另外我們假定您是一位初級或者中級程式設計師,並已經從事程式設計工作有半年或一年的時間。
要搞清楚編譯器為什麼會報告某一行上存在錯誤,首先必須明確編譯器解析PHP程式碼的機制。我並不打算在本文中對此進行詳細論述,但是,我們將會討論一些更易於引發錯誤的簡單概念。
變數宣告
如果在一條語句中宣告一個變數,具體方式如下所示:
$variable = 'value';
編譯器首先求出語句右半部分的值(即等號右邊的所有內容)。在一些程式設計書籍中,將此表示為語句的 RHS (右半部分)。恰恰正是語句的這一部分常常會引發錯誤。如果使用的語法不正確,就會出現解析錯誤。
解析錯誤
Parse error:解析錯誤,unexpected T_WHILE in c:program filesapache groupapachehtdocsscript.php on line 19
每次確定了前一錯誤時,解析錯誤一個接一個地不斷出現。因為 PHP 在第一個解析錯誤之後就停止執行指令碼,除錯並糾正這一系列的錯誤往往會讓人覺得特別厭煩。
而且,解析錯誤具有很少的資訊,幾乎不報告錯誤所在的行號。具體原因就是當出現錯誤時,編譯器判定好幾行的語法看起來應該是有效的,直至遇到無效的語法,最可能的情形就是表示式中使用了預定義的字詞,例如;
while = 10; // Bad ? while 就是一個預定義字詞,不能分配給一個值
預定義的字詞包括 while、function 等,如果 PHP 使用 uses to evaluate your code。您不能使用這些預定義字詞來命名變數,而且如果您非要這樣做的話,PHP 就會報出更多的錯誤,這是您無法忍受。
關於這個問題,下面的示例可能會對您有所幫助。請諮詢閱讀一下下面所示的 PHP 程式碼:
編譯 PHP 指令碼時,PHP 編譯器會盡其所能報告它遇到的第一個問題。這樣就產生一個問題:只有當錯誤出現時,PHP 才能將它識別出來(本文後面對此問題進行了詳細描述)。正是由於這個緣故,編譯器指出出錯的那行,從表面上看來可能語法正確無誤,或者可能是根本就不存在的一行!
更好地理解錯誤資訊可以大大節省確定並改正錯誤內容所花費的時間。因此,在本文中,我將努力闡明多種不同型別的PHP報錯資訊,以及在開發過程中如何正確理解各種報錯資訊的含義。
本文中所講述的內容與您所應用的PHP的版本無關,因為本文所描述的各種錯誤並不限定於某一特殊版本的特定錯誤。另外我們假定您是一位初級或者中級程式設計師,並已經從事程式設計工作有半年或一年的時間。
要搞清楚編譯器為什麼會報告某一行上存在錯誤,首先必須明確編譯器解析PHP程式碼的機制。我並不打算在本文中對此進行詳細論述,但是,我們將會討論一些更易於引發錯誤的簡單概念。
變數宣告
如果在一條語句中宣告一個變數,具體方式如下所示:
$variable = 'value';
編譯器首先求出語句右半部分的值(即等號右邊的所有內容)。在一些程式設計書籍中,將此表示為語句的 RHS (右半部分)。恰恰正是語句的這一部分常常會引發錯誤。如果使用的語法不正確,就會出現解析錯誤。
解析錯誤
Parse error:解析錯誤,unexpected T_WHILE in c:program filesapache groupapachehtdocsscript.php on line 19
每次確定了前一錯誤時,解析錯誤一個接一個地不斷出現。因為 PHP 在第一個解析錯誤之後就停止執行指令碼,除錯並糾正這一系列的錯誤往往會讓人覺得特別厭煩。
而且,解析錯誤具有很少的資訊,幾乎不報告錯誤所在的行號。具體原因就是當出現錯誤時,編譯器判定好幾行的語法看起來應該是有效的,直至遇到無效的語法,最可能的情形就是表示式中使用了預定義的字詞,例如;
while = 10; // Bad ? while 就是一個預定義字詞,不能分配給一個值
預定義的字詞包括 while、function 等,如果 PHP 使用 uses to evaluate your code。您不能使用這些預定義字詞來命名變數,而且如果您非要這樣做的話,PHP 就會報出更多的錯誤,這是您無法忍受。
關於這個問題,下面的示例可能會對您有所幫助。請諮詢閱讀一下下面所示的 PHP 程式碼:
QUOTE:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-945971/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
|
相關文章
- 正確理解 PHP 的過載PHP
- Flutter 錯誤捕獲的正確姿勢Flutter
- C++編譯錯誤的正確查詢方式C++編譯
- mysql 解決字符集錯誤 正確摘錄MySql
- PHP 字元轉拼音首字iconv 警告錯誤PHP字元
- 談如何正確理解 IP 資料的覆蓋率,兼談正確率~
- JavaScript錯誤資訊JavaScript
- PHP Opcache 的正確使用PHPopcache
- 怎樣正確理解volatile?
- 正確理解CAP理論
- PHP捕捉錯誤PHP
- 如何正確理解棧和堆?
- python 用traceback列印錯誤訊息(轉)Python
- Request 驗證錯誤沒有返回錯誤資訊?
- PHP 錯誤處理PHP
- php錯誤處理PHP
- php程式daemon化的正確做法PHP
- 正確理解memcached,才能更好的使用
- background-position的正確理解方式
- 理解並正確使用synchronized和volatilesynchronized
- IT部門資訊化正確開啟方式
- 如何正確挑選人力資源資訊系統?
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- PHP錯誤和異常PHP
- 詳細分析 Java 中啟動執行緒的正確和錯誤方式Java執行緒
- 前端工作流編譯正確操作流程和錯誤處理記錄前端編譯
- 0176-列印錯誤提示資訊
- 異常錯誤資訊處理
- Node.js Event Loop 的三大常見理解誤區和正確概念辨析Node.jsOOP
- 如何正確理解「指標」和「標籤」指標
- PHP負數轉16進位制再轉到10進位制的正確姿勢PHP
- SQL未明確定義列錯誤SQL
- 玩轉 Ceph 的正確姿勢
- 完美解決未能正確載入“Visual C++ Resource Editor Package”的錯誤提示C++Package
- 執行指令碼寫入中間表錯誤返回錯誤資訊指令碼
- 用 PHP 讀取檔案的正確方法PHP
- 顯示驗證的錯誤資訊
- PHP 核心特性 - 錯誤處理PHP
- 如何關閉PHP錯誤提示PHP