欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
如何正確理解PHP的錯誤信息

如何正確理解PHP的錯誤信息

 

  我們編寫(xiě)程序時(shí),無(wú)論怎樣小心謹慎,犯錯總是在所難免的。這些錯誤通常會(huì )迷惑PHP編譯器。如果開(kāi)發(fā)人員無(wú)法了解編譯器報錯信息的含義,那么這些錯誤信息不僅毫無(wú)用處,還會(huì )常常讓人感到沮喪。  

  編譯PHP腳本時(shí),PHP編譯器會(huì )盡其所能報告它遇到的第一個(gè)問(wèn)題。這樣就產(chǎn)生一個(gè)問(wèn)題:只有當錯誤出現時(shí),PHP才能將它識別出來(lái)(本文后面對此問(wèn)題進(jìn)行了詳細描述)。正是由于這個(gè)緣故,編譯器指出出錯的那行,從表面上看來(lái)可能語(yǔ)法正確無(wú)誤,或者可能是根本就不存在的一行! 

  更好地理解錯誤信息可以大大節省確定并改正錯誤內容所花費的時(shí)間。因此,在本文中,我將努力闡明多種不同類(lèi)型的PHP報錯信息,以及在開(kāi)發(fā)過(guò)程中如何正確理解各種報錯信息的含義。 

  本文中所講述的內容與您所應用的PHP的版本無(wú)關(guān),因為本文所描述的各種錯誤并不限定于某一特殊版本的特定錯誤。另外我們假定您是一位初級或者中級程序員,并已經(jīng)從事編程工作有半年或一年的時(shí)間。

編譯器的工作方式 

  要搞清楚編譯器為什么會(huì )報告某一行上存在錯誤,首先必須明確編譯器解析PHP代碼的機制。我并不打算在本文中對此進(jìn)行詳細論述,但是,我們將會(huì )討論一些更易于引發(fā)錯誤的簡(jiǎn)單概念。 

變量聲明

  如果在一條語(yǔ)句中聲明一個(gè)變量,具體方式如下所示: 
$variable = ’value’;
  編譯器首先求出語(yǔ)句右半部分的值(即等號右邊的所有內容)。在一些編程書(shū)籍中,將此表示為語(yǔ)句的 RHS (右半部分)。恰恰正是語(yǔ)句的這一部分常常會(huì )引發(fā)錯誤。如果使用的語(yǔ)法不正確,就會(huì )出現解析錯誤。 

解析錯誤 

Parse error:解析錯誤,unexpected T_WHILE in c:\program files\apache group\apache\htdocs\script.php on line 19 

  每次確定了前一錯誤時(shí),解析錯誤一個(gè)接一個(gè)地不斷出現。因為PHP在第一個(gè)解析錯誤之后就停止執行腳本,調試并糾正這一系列的錯誤往往會(huì )讓人覺(jué)得特別厭煩。 

  而且,解析錯誤具有很少的信息,幾乎不報告錯誤所在的行號。具體原因就是當出現錯誤時(shí),編譯器判定好幾行的語(yǔ)法看起來(lái)應該是有效的,直至遇到無(wú)效的語(yǔ)法,最可能的情形就是表達式中使用了預定義的字詞,例如; 

while = 10; // Bad ? while 就是一個(gè)預定義字詞,不能分配給一個(gè)值

  預定義的字詞包括 while、function等,如果PHP使用 uses to evaluate your code. 您不能使用這些預定義字詞來(lái)命名變量,而且如果您非要這樣做的話(huà),PHP就會(huì )報出更多的錯誤,這是您無(wú)法忍受。 

  關(guān)于這個(gè)問(wèn)題,下面的示例可能會(huì )對您有所幫助。請咨詢(xún)閱讀一下下面所示的PHP 代碼: 

  錯誤位于"$b ="一行(在語(yǔ)句的末端缺少分號),所以錯誤應該是"解析錯誤:第3行缺少分號"對吧?而不應該依據解析器判定的: 
Parse error: parse error, unexpected T_IF in c:\program files\apache
group\apache\htdocs\ereg2.php on line 4

  在第4行,if() 語(yǔ)句的語(yǔ)法是正確的。那么,編譯器是被什么給搞糊涂了呢?線(xiàn)索就是"unexpected T_IF" 部分。出現 "unexpected T_???"錯誤時(shí),它所表示的含義為:編譯器發(fā)現在預定義字不應該出現的位置出現。T_IF 代表 if(), T_WHILE 代表 while(), T_FOR 代表 for()等。 

值得慶幸的是,一些錯誤的原因也很簡(jiǎn)單: 

語(yǔ)句沒(méi)有使用分號(;)結束,比如上面的示例。字符串中缺少引號。 

其他一些常見(jiàn)的錯誤 

  我見(jiàn)過(guò)的最常見(jiàn)的錯誤就是,當沒(méi)有使用大括號( } )結束一個(gè)函數或者一個(gè)循環(huán)時(shí)出現的錯誤,這很可能是最常見(jiàn),最讓人煩的錯誤。具體代碼如下: function UselessFunction() { 
for($i < 0; $i < 10; $i++){ 
}
  將產(chǎn)生下列錯誤: 
Parse error: parse error, unexpected $ in c:\program files\apache 
group\apache\htdocs\ereg2.php on line 9

  由于函數 UselessFunction 沒(méi)有使用大括號( } )來(lái)結束,PHP編譯器不斷查找表示結束的大括號直至到達文件末尾為止。因為編譯器未找到一個(gè)匹配的大括號,就會(huì )報告文件末尾處有錯誤。 

  如果正確地反映了代碼的層次結構,錯誤信息就會(huì )變得非常明顯。如果沒(méi)有標明代碼的層次結構,那么最后要想查清楚到底忘記了什么也會(huì )變得幾乎是不可能的。所以,請記住,一定要標明代碼的層次結構。Tab鍵可以很容易地實(shí)現這一點(diǎn)。對后續的開(kāi)發(fā)人員來(lái)說(shuō),把握代碼框架并對其進(jìn)行修改也會(huì )更容易一些。 

MySQL 錯誤 

  另一極其令人討厭的錯誤信息就是最常見(jiàn)的MySQL錯誤,這常常使 PHP新手感到頗為頭疼: Warning: Supplied argument is not a valid MySQL result resource in...

  上面所報告有錯的一行可能是:

while($row = mysql_fetch_array($result)) {

  參數 $result并不是一個(gè)有效的資源。在英語(yǔ)中它表示因為查詢(xún)失敗,將無(wú)法處理mysql_fetch_array。任一查詢(xún)的語(yǔ)法無(wú)效(您應該將查詢(xún)復制-粘貼到MySQL 控制臺參考來(lái)進(jìn)行測試),或者與數據庫的連接失敗(這種情況下您應該再次檢查用戶(hù)名和口令等)。 

防止錯誤發(fā)生 

  第一步,智能代碼器可采取以下幾步來(lái)消除下列錯誤出現: 

 在每一條語(yǔ)句的末尾處,不必考慮添加分號――這應該成為一種習慣。 

 總是要盡可能標明代碼的層次結構,這可以使您能夠查看是否忘記在if 調用或函數末端等位置添加大括號。 

 請使用可突出顯示語(yǔ)法的編輯器(如 HTML-Kit)。有了這類(lèi)編輯器的輔助,您就能確定是否忘記了添加引號,是否缺少分號等。 

結論

  本文我們對PHP編譯器可報出的一些看起來(lái)可能沒(méi)有什么意義的錯誤有了一定的了解。我們需要將所學(xué)的知識應用到如何避免錯誤以及錯誤出現時(shí)如何糾正錯誤。調試是一個(gè)開(kāi)發(fā)人員所有工作中的最重要的部分之一。提高調試效率可大大加快整個(gè)工作的進(jìn)度,縮短完成一項工程所需花費的時(shí)間,同時(shí)還可以明顯減輕代碼失敗所帶來(lái)的精神壓力。(寧凱編譯)

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
PHP容易犯的小錯誤
GCC 的編譯流程及中間表示層 RTL 的初步探索
手把手教你做一個(gè) C 語(yǔ)言編譯器(7):語(yǔ)句
(基于Java)編寫(xiě)編譯器和解釋器
讓apache解析html里的PHP代碼
PHP錯誤集錦
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久