最近一段時間,php憑借其功能強大,簡單易用的特點被越來越多的人們所喜愛和接受,成為目前最為流行的腳本編程語言之一。本文將結(jié)合用戶在使用php過程中經(jīng)常容易出現(xiàn)的問題,包括語法錯誤,程序運行錯誤以及邏輯錯誤等展開詳細的介紹,希望能夠?qū)δ切┠壳罢趯W習php語言的用戶有所幫助。此外,本文還將會在文章的結(jié)束部分對php編程過程中應當注意的各種事項加以匯總,供讀者參考。
php腳本語言所具有一個顯著的特點就是能夠自動生成變量實例,不要求用戶對所需要使用的變量進行聲明。該特點既有值得推崇之處,但是同時也為用戶所編寫的腳本程序埋下了隱患。從好的方面來說,用戶不再需要象使用c語言那樣,在程序的開頭對每一個將要在程序中使用的變量進行聲明;但是,現(xiàn)在用戶必須非常小心每一個變量名稱的正確拼寫,否則就可能會在無意當中創(chuàng)建了新的變量。有些編程語言,例如perl等,可以記錄下程序中只使用過一次的變量的信息,根據(jù)用戶的預先設置發(fā)出警告提示。此外,perl還提供了一個功能十分強大的調(diào)試器。截止到4.0.2版本,php語言中還沒有包含調(diào)試器。但是這并沒有影響到php語言的流行和推廣。php提供了非常廣泛的功能,即使與象c語言這樣成熟的編程語言相比也毫不遜色??梢哉f,php是目前使用最方便,對web支持功能最完善的腳本語言之一。
下面,就讓我們言歸正傳,來看一看在php編程過程容易出現(xiàn)哪些問題,以及相應的應當采用什么樣應對措施。
分號的使用正象我們平時寫文章時必須要在每一句話的結(jié)尾處加上句號一樣,php要求程序中的每一條語句都必須使用分號“;”結(jié)束。這是一條最基本的語法規(guī)則,但是同時也最容易出現(xiàn)問題。我們在編寫程序時,很少會一行一行的檢查是否漏掉了分號,但是一旦出現(xiàn)任何一處疏忽,解析程序就回立刻發(fā)出錯誤報告。有時,報告中可能會包含出現(xiàn)問題的語句行數(shù)。
<?php
$output="hello world";
echo $output
$other="blah";
print $somemoretext;
?>
上述代碼的第二行“echo $output”的結(jié)尾處我們漏掉了一個分號,如果執(zhí)行該腳本將會產(chǎn)生如下錯誤提示:
parse error: parse error, expecting `’,’’ or `’;’’ in /usr/local/apache/htdocs/test.php on line 8報告雖然指出了出現(xiàn)錯誤的原因,即漏掉了逗號“,”或分號“;”,但是卻將出現(xiàn)問題的語句定在了第八行。因為這段代碼非常簡單,我們很容易就可以找到真正出現(xiàn)錯誤的地方。但是,如果程序非常復雜時,要想順利的找出錯誤就有些困難了。
根據(jù)筆者以往的經(jīng)驗,建議采用以下方法:
如果當錯誤報告中指出的語句沒有明顯的問題時,可以檢查位于該語句之前的其它指令行(不包括注釋行)是否正確。如果仍然沒有找到錯誤,可以將報告中指出的語句行注釋掉(在該語句行的最前面加上“//”或“#”注釋符號)或者改為用戶能夠確保完全沒有問題的其它語句。之后,重新運行程序,如果錯誤提示仍然指向同一行,就表明真正有問題的語句應當位于被注釋掉的語句行的前面。按照上述方法逐一檢查位置靠前的每一行指令,直到錯誤提示信息發(fā)生改變。這時,我們就成功的挖出了真正的罪魁禍首。
變量的問題與其它編程語言要求用戶顯式聲明變量不同,php語言允許用戶自動使用所有變量而不必進行事先的聲明。變量名稱的拼寫錯誤成為困擾php用戶的一個大問題。
<?php
function combine ($firsthalf, $secondhalf)
{
$combined_string=$firsthalf.$secondhalf;
return $combined_string;
}
$firststring="wdvl - ";
$secondstring="illustrated encyclopedia";
$combine_result=combine ($firststring, $secondstring);
print $combined_result;
?>
當我們運行以上腳本時,將會看到由于程序沒有返回任何數(shù)據(jù)而出現(xiàn)的錯誤提示。這里,我們?yōu)榱烁玫恼f明問題選擇了一個非常直觀的例子。在現(xiàn)實當中,有時問題并不會這么簡單。相信大家都已經(jīng)找到了出現(xiàn)問題的原因,那就是“print $combined_result;”中的變量名稱“$combined_result”應當改為“$combine_result”。
新聞熱點
疑難解答