成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

正確理解PHP程序編譯時(shí)的錯(cuò)誤信息

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

51CTO推薦:PHP+MySQL視頻教程

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

編譯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ò)信息,以及在開發(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\\script.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)。

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

我見過(guò)的最常見的錯(cuò)誤就是,當(dāng)沒(méi)有使用大括號(hào)( } )結(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 沒(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ù)的開發(fā)人員來(lái)說(shuō),把握代碼框架并對(duì)其進(jìn)行修改也會(huì)更容易一些。

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ǔ)中它表示因?yàn)椴樵兪?,將無(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è)開發(fā)人員所有工作中的最重要的部分之一。提高調(diào)試效率可大大加快整個(gè)工作的進(jìn)度,縮短完成一項(xiàng)工程所需花費(fèi)的時(shí)間,同時(shí)還可以明顯減輕代碼失敗所帶來(lái)的精神壓力。

【編輯推薦】

  1. 讓PHP引擎全速運(yùn)轉(zhuǎn)的三個(gè)絕招
  2. 國(guó)外十大最流行PHP框架排名
  3. 利用PHP的OOP特性實(shí)現(xiàn)數(shù)據(jù)保護(hù)
責(zé)任編輯:佚名 來(lái)源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2009-12-03 18:07:47

PHP轉(zhuǎn)義

2009-12-04 18:00:46

PHP開發(fā)MVC模型

2011-02-21 13:41:20

Postfix問(wèn)題錯(cuò)誤

2009-12-09 14:04:45

PHP include

2009-12-07 14:53:13

PHP抽象類應(yīng)用

2009-12-04 17:16:41

PHP析構(gòu)函數(shù)

2020-01-07 15:10:32

Linuxinode命令

2009-06-18 10:29:24

Hibernate I

2025-05-23 09:20:16

2024-09-03 16:38:11

2009-12-14 17:48:46

Ruby String

2010-03-10 14:34:52

Python異常處理

2023-08-27 08:57:31

2023-10-27 11:27:28

2010-07-20 12:35:33

SQL Server索

2010-02-01 10:54:37

C++框架

2024-01-29 00:35:00

Go并發(fā)開發(fā)

2023-12-27 19:52:08

Go模塊命令

2009-12-03 15:31:30

PHP獲取顯示數(shù)據(jù)庫(kù)數(shù)

2023-11-27 00:39:46

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品久久片 | 久操伊人 | 国产成人精品免高潮在线观看 | 99re视频在线免费观看 | 亚洲欧美日韩中文在线 | 欧美精品一区二区在线观看 | 一级久久久久久 | 欧美激情一区 | 亚洲一一在线 | 国产精品亚洲精品 | 一区二区三区中文字幕 | 日韩欧美手机在线 | 婷婷色综合 | 欧美一级黄色片在线观看 | 亚洲黄色一区二区三区 | 日韩欧美中文字幕在线观看 | 亚洲综合国产精品 | 国产精久久久久久久妇剪断 | 天天爽夜夜操 | 伊人伊人伊人 | 1级黄色大片| 天天久久 | 国产一区二区三区四区五区加勒比 | 毛片在线看片 | 九九99九九精彩46 | 日日干日日操 | 91国内精品 | 国产精品久久久久久久午夜片 | 中文字幕av免费 | 99国产欧美| 欧美精品一二区 | 亚洲xxxxx | 精品在线一区 | 一本在线| 国产精品jizz在线观看老狼 | 91免费观看国产 | 成人免费视频播放 | 日本aaaa| 国产精品国产成人国产三级 | 美女视频.| 日本一区二区三区在线观看 |