亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來(lái)到思海網(wǎng)絡(luò),我們將竭誠(chéng)為您提供優(yōu)質(zhì)的服務(wù)! 誠(chéng)征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購(gòu)買流程 | 付款方式 | 聯(lián)系我們 [ 會(huì)員登錄/注冊(cè) ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁(yè) >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

如何正確理解PHP的錯(cuò)誤信息

添加時(shí)間:2013-9-5 11:49:40  添加: 思海網(wǎng)絡(luò) 

 編譯PHP腳本時(shí),PHP編譯器會(huì)盡其所能報(bào)告它遇到的第一個(gè)問(wèn)題。這樣就產(chǎn)生一個(gè)問(wèn)題:只有當(dāng)錯(cuò)誤出現(xiàn)時(shí),PHP才能將它識(shí)別出來(lái)(本文后面對(duì)此問(wèn)題進(jìn)行了詳細(xì)描述)。正是由于這個(gè)緣故,編譯器指出出錯(cuò)的那行,從表面上看來(lái)可能語(yǔ)法正確無(wú)誤,或者可能是根本就不存在的一行!
  
  更好地理解錯(cuò)誤信息可以大大節(jié)省確定并改正錯(cuò)誤內(nèi)容所花費(fèi)的時(shí)間。因此,在本文中,我將努力闡明多種不同類型的PHP報(bào)錯(cuò)信息,以及在開(kāi)發(fā)過(guò)程中如何正確理解各種報(bào)錯(cuò)信息的含義。
  
  本文中所講述的內(nèi)容與您所應(yīng)用的PHP的版本無(wú)關(guān),因?yàn)楸疚乃枋龅母鞣N錯(cuò)誤并不限定于某一特殊版本的特定錯(cuò)誤。另外我們假定您是一位初級(jí)或者中級(jí)程序員,并已經(jīng)從事編程工作有半年或一年的時(shí)間。
  
  編譯器的工作方式
  
  要搞清楚編譯器為什么會(huì)報(bào)告某一行上存在錯(cuò)誤,首先必須明確編譯器解析PHP代碼的機(jī)制。我并不打算在本文中對(duì)此進(jìn)行詳細(xì)論述,但是,我們將會(huì)討論一些更易于引發(fā)錯(cuò)誤的簡(jiǎn)單概念。
  
  變量聲明
  
  如果在一條語(yǔ)句中聲明一個(gè)變量,具體方式如下所示:
  
  $variable = 'value';
  編譯器首先求出語(yǔ)句右半部分的值(即等號(hào)右邊的所有內(nèi)容)。在一些編程書籍中,將此表示為語(yǔ)句的 RHS (右半部分)。恰恰正是語(yǔ)句的這一部分常常會(huì)引發(fā)錯(cuò)誤。如果使用的語(yǔ)法不正確,就會(huì)出現(xiàn)解析錯(cuò)誤。
  
  解析錯(cuò)誤
  
  Parse error:解析錯(cuò)誤,unexpected T_WHILE in c:\program files\apache group\apache\htdocs\.php on line 19
  
  每次確定了前一錯(cuò)誤時(shí),解析錯(cuò)誤一個(gè)接一個(gè)地不斷出現(xiàn)。因?yàn)镻HP在第一個(gè)解析錯(cuò)誤之后就停止執(zhí)行腳本,調(diào)試并糾正這一系列的錯(cuò)誤往往會(huì)讓人覺(jué)得特別厭煩。
  
  而且,解析錯(cuò)誤具有很少的信息,幾乎不報(bào)告錯(cuò)誤所在的行號(hào)。具體原因就是當(dāng)出現(xiàn)錯(cuò)誤時(shí),編譯器判定好幾行的語(yǔ)法看起來(lái)應(yīng)該是有效的,直至遇到無(wú)效的語(yǔ)法,最可能的情形就是表達(dá)式中使用了預(yù)定義的字詞,例如;
  
  while = 10; // Bad ? while 就是一個(gè)預(yù)定義字詞,不能分配給一個(gè)值
  
  預(yù)定義的字詞包括 while、function等,如果PHP使用 uses to evaluate your code. 您不能使用這些預(yù)定義字詞來(lái)命名變量,而且如果您非要這樣做的話,PHP就會(huì)報(bào)出更多的錯(cuò)誤,這是您無(wú)法忍受。
  
  關(guān)于這個(gè)問(wèn)題,下面的示例可能會(huì)對(duì)您有所幫助。請(qǐng)咨詢閱讀一下下面所示的PHP 代碼:
  
  <?php
  $b = "somevalue"
  if($b == "somevalue"){
  print "Hello world!";
  }
  ?>
  
  錯(cuò)誤位于"$b ="一行(在語(yǔ)句的末端缺少分號(hào)),所以錯(cuò)誤應(yīng)該是"解析錯(cuò)誤:第3行缺少分號(hào)"對(duì)吧?而不應(yīng)該依據(jù)解析器判定的:
  Parse error: parse error, unexpected T_IF in c:\program files\apache
  group\apache\htdocs\ereg2.php on line 4
  
  在第4行,if() 語(yǔ)句的語(yǔ)法是正確的。那么,編譯器是被什么給搞糊涂了呢?線索就是"unexpected T_IF" 部分。出現(xiàn) "unexpected T_???"錯(cuò)誤時(shí),它所表示的含義為:編譯器發(fā)現(xiàn)在預(yù)定義字不應(yīng)該出現(xiàn)的位置出現(xiàn)。T_IF 代表 if(), T_WHILE 代表 while(), T_FOR 代表 for()等。
  
  值得慶幸的是,一些錯(cuò)誤的原因也很簡(jiǎn)單:
  
  語(yǔ)句沒(méi)有使用分號(hào)(;)結(jié)束,比如上面的示例。字符串中缺少引號(hào)。
  
  其他一些常見(jiàn)的錯(cuò)誤
  
  我見(jiàn)過(guò)的最常見(jiàn)的錯(cuò)誤就是,當(dāng)沒(méi)有使用大括號(hào)( } )結(jié)束一個(gè)函數(shù)或者一個(gè)循環(huán)時(shí)出現(xiàn)的錯(cuò)誤,這很可能是最常見(jiàn),最讓人煩的錯(cuò)誤。具體代碼如下:
  
  function UselessFunction() {
  for($i < 0; $i < 10; $i++){
  }
  將產(chǎn)生下列錯(cuò)誤:
  Parse error: parse error, unexpected $ in c:\program files\apache
  group\apache\htdocs\ereg2.php on line 9
  
  由于函數(shù) UselessFunction 沒(méi)有使用大括號(hào)( } )來(lái)結(jié)束,PHP編譯器不斷查找表示結(jié)束的大括號(hào)直至到達(dá)文件末尾為止。因?yàn)榫幾g器未找到一個(gè)匹配的大括號(hào),就會(huì)報(bào)告文件末尾處有錯(cuò)誤。
  
  如果正確地反映了代碼的層次結(jié)構(gòu),錯(cuò)誤信息就會(huì)變得非常明顯。如果沒(méi)有標(biāo)明代碼的層次結(jié)構(gòu),那么最后要想查清楚到底忘記了什么也會(huì)變得幾乎是不可能的。所以,請(qǐng)記住,一定要標(biāo)明代碼的層次結(jié)構(gòu)。Tab鍵可以很容易地實(shí)現(xiàn)這一點(diǎn)。對(duì)后續(xù)的開(kāi)發(fā)人員來(lái)說(shuō),把握代碼框架并對(duì)其進(jìn)行修改也會(huì)更容易一些。
  
  MySQL 錯(cuò)誤
  
  另一極其令人討厭的錯(cuò)誤信息就是最常見(jiàn)的MySQL錯(cuò)誤,這常常使 PHP新手感到頗為頭疼: Warning: Supplied argument is not a valid MySQL result resource in...
  
  上面所報(bào)告有錯(cuò)的一行可能是:
  
  while($row = mysql_fetch_array($result)) {
  
  參數(shù) $result并不是一個(gè)有效的資源。在英語(yǔ)中它表示因?yàn)椴樵兪。瑢o(wú)法處理mysql_fetch_array。任一查詢的語(yǔ)法無(wú)效(您應(yīng)該將查詢復(fù)制-粘貼到MySQL 控制臺(tái)參考來(lái)進(jìn)行測(cè)試),或者與數(shù)據(jù)庫(kù)的連接失敗(這種情況下您應(yīng)該再次檢查用戶名和口令等)。
  
  防止錯(cuò)誤發(fā)生
  
  第一步,智能代碼器可采取以下幾步來(lái)消除下列錯(cuò)誤出現(xiàn):
  
  · 在每一條語(yǔ)句的末尾處,不必考慮添加分號(hào)——這應(yīng)該成為一種習(xí)慣。
  
  · 總是要盡可能標(biāo)明代碼的層次結(jié)構(gòu),這可以使您能夠查看是否忘記在if 調(diào)用或函數(shù)末端等位置添加大括號(hào)。
  
  · 請(qǐng)使用可突出顯示語(yǔ)法的編輯器(如 HTML-Kit)。有了這類編輯器的輔助,您就能確定是否忘記了添加引號(hào),是否缺少分號(hào)等。
  
  結(jié)論
  
  本文我們對(duì)PHP編譯器可報(bào)出的一些看起來(lái)可能沒(méi)有什么意義的錯(cuò)誤有了一定的了解。我們需要將所學(xué)的知識(shí)應(yīng)用到如何避免錯(cuò)誤以及錯(cuò)誤出現(xiàn)時(shí)如何糾正錯(cuò)誤。調(diào)試是一個(gè)開(kāi)發(fā)人員所有工作中的最重要的部分之一。提高調(diào)試效率可大大加快整個(gè)工作的進(jìn)度,縮短完成一項(xiàng)工程所需花費(fèi)的時(shí)間,同時(shí)還可以明顯減輕代碼失敗所帶來(lái)的精神壓力。

關(guān)鍵字:PHP、信息、編譯器

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國(guó)增值電信業(yè)務(wù)經(jīng)營(yíng)許可證: 粵B1.B2-20030321 備案號(hào):粵B2-20030321-1
網(wǎng)站公安備案編號(hào):44060602000007 交互式欄目專項(xiàng)備案編號(hào):200303DD003  
察察 工商 網(wǎng)安 舉報(bào)有獎(jiǎng)  警警  手機(jī)打開(kāi)網(wǎng)站