中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)絡(luò)編程 > 如何正確理解PHP的錯(cuò)誤信息
PHP中創(chuàng)建并處理圖象 回到列表 處理較長文章,添加 …… 效果
 如何正確理解PHP的錯(cuò)誤信息

作者:Elan Bechor 時(shí)間: 2004-05-31 文檔類型:轉(zhuǎn)載 來自:賽迪網(wǎng)

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

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

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

  本文中所講述的內(nèi)容與您所應(yīng)用的PHP的版本無關(guān),因?yàn)楸疚乃枋龅母鞣N錯(cuò)誤并不限定于某一特殊版本的特定錯(cuò)誤。另外我們假定您是一位初級或者中級程序員,并已經(jīng)從事編程工作有半年或一年的時(shí)間。

編譯器的工作方式

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

變量聲明

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

解析錯(cuò)誤

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

  每次確定了前一錯(cuò)誤時(shí),解析錯(cuò)誤一個(gè)接一個(gè)地不斷出現(xiàn)。因?yàn)镻HP在第一個(gè)解析錯(cuò)誤之后就停止執(zhí)行腳本,調(diào)試并糾正這一系列的錯(cuò)誤往往會讓人覺得特別厭煩。

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

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

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

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

<?php
$b = "somevalue"
if($b == "somevalue"){
print "Hello world!";
}
?>


  錯(cuò)誤位于"$b ="一行(在語句的末端缺少分號),所以錯(cuò)誤應(yīng)該是"解析錯(cuò)誤:第3行缺少分號"對吧?而不應(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() 語句的語法是正確的。那么,編譯器是被什么給搞糊涂了呢?線索就是"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é)束,比如上面的示例。字符串中缺少引號。

其他一些常見的錯(cuò)誤

  我見過的最常見的錯(cuò)誤就是,當(dāng)沒有使用大括號( } )結(jié)束一個(gè)函數(shù)或者一個(gè)循環(huán)時(shí)出現(xiàn)的錯(cuò)誤,這很可能是最常見,最讓人煩的錯(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 沒有使用大括號( } )來結(jié)束,PHP編譯器不斷查找表示結(jié)束的大括號直至到達(dá)文件末尾為止。因?yàn)榫幾g器未找到一個(gè)匹配的大括號,就會報(bào)告文件末尾處有錯(cuò)誤。

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

MySQL 錯(cuò)誤

  另一極其令人討厭的錯(cuò)誤信息就是最常見的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àn)椴樵兪,將無法處理mysql_fetch_array。任一查詢的語法無效(您應(yīng)該將查詢復(fù)制-粘貼到MySQL 控制臺參考來進(jìn)行測試),或者與數(shù)據(jù)庫的連接失敗(這種情況下您應(yīng)該再次檢查用戶名和口令等)。

防止錯(cuò)誤發(fā)生

  第一步,智能代碼器可采取以下幾步來消除下列錯(cuò)誤出現(xiàn):

· 在每一條語句的末尾處,不必考慮添加分號——這應(yīng)該成為一種習(xí)慣。

· 總是要盡可能標(biāo)明代碼的層次結(jié)構(gòu),這可以使您能夠查看是否忘記在if 調(diào)用或函數(shù)末端等位置添加大括號。

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

結(jié)論

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

出處:賽迪網(wǎng)
責(zé)任編輯:cjj

◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論

作者文章
如何正確理解PHP的錯(cuò)誤信息
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開啟
國際體驗(yàn)設(shè)計(jì)大會7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個(gè)可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請您注意:
·不良評論請用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報(bào)告錯(cuò)誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2