php編程時難免會遇到一些錯誤,調(diào)試錯誤雖然不是一門高深的學問但是有效的查找卻很重要。
基本策略應遵循一下原則:
1)出現(xiàn)錯誤,判斷錯誤出現(xiàn)在那個環(huán)節(jié)。
2)判斷出錯原因,估計錯誤出現(xiàn)的位置
3)查找錯誤根源
4)對錯誤進行修改,首先要先備份
,別弄的錯誤越改越多。
5)對修改后的代碼進行測試。
手段:
1)增加中間變量或者跟蹤變量。例如輸出一行代碼或者輸出一些相關變量來發(fā)現(xiàn)錯誤根源;
2)注釋掉部分代碼 (排除法),當無法測試出錯誤根源的時候,就使用排除法
,先注釋掉一下代碼,然后運行查看錯誤是否依然存在。如果仍然存在則繼續(xù)注釋。
3)同過調(diào)試器來單步調(diào)試,這樣可以跟蹤整個程序的執(zhí)行過程。發(fā)現(xiàn)是否有些應該被執(zhí)行的代碼沒有被執(zhí)行?;蛘咦兞抠x值錯誤等各種導致錯誤的原因。
常見錯誤分享:
1。語法錯誤:
1)缺少分號。
在編寫代碼的時候由于某個語句或者變量的結尾處沒有使用“;”,從而導致程序出錯;
Parse error:
syntax error, unexpected T_ECHO in D:testwwwrootbloglogin.php on
line 4
2)缺少單引號或者雙引號
Parse error:
syntax error, unexpected $end in D:testwwwrootbloglogin.php on
line 7
3)缺少關鍵字或者邏輯結構
例如沒有寫while條件
Parse error:
syntax error, unexpected ';', expecting T_WHILE inD:testwwwrootbloglogin.php on
line 14
4)缺少括號
出錯在程序的最后一行
而且其并沒有錯誤,就很可能哪里缺少括號了
Parse error: syntax error,
unexpected ';' in D:testwwwrootbloglogin.php on
line 15
5)缺少美元符號$;
2.語義錯誤
例如:
$e=$a+$b+$c;
而在php中的連接符是“.”而不是“+”,沒有得到預期的結果;
3.注釋錯誤
對于程序來說注釋是很重要的,特別對后期的修改和維護更是至關重要。在程序中使用了錯誤的注釋,雖然不會影響其運行,但對修改產(chǎn)出影響
例如:
<?php
//循環(huán)出$i,從0到50
for($i=0;$i<50;$i++)
{
echo $i;
}
?>
運行結果是01234。。。4849;但到后期維護時則認為是錯誤的 ,因為注釋里的是到50,而實際是“大于等于0小于50的數(shù)字”
4.運行錯誤
如果運行中出現(xiàn)錯誤是個麻煩的事情,很難檢測到錯誤出現(xiàn)在什么地方,同時也難以改正;
1)調(diào)用不存在的函數(shù) 例如你調(diào)用時把函數(shù)名寫錯了
Parse
error: syntax error, unexpected T_VARIABLE, expecting ';'
inD:testwwwrootbloglogin.php on
line 15
或者沒有指定參數(shù) 例如
<?php
echo date();
//使用此函數(shù)得指定參數(shù);
?>
則得到告警:
Warning: date() expects at least 1
parameter, 0 given in D:testwwwrootbloglogin.phpon
line 9
2)讀寫文件
訪問文件的錯誤也經(jīng)常出現(xiàn)
3)包含的文件不存在
<?php
include("abc.txt");
?>
告警:Warning:
include(abc.txt) [function.include]:
failed to open stream: No such file or directory in D:testwwwrootbloglogin.php on
line 2
Warning: include() [function.include]: Failed opening 'abc.txt' for inclusion (include_path='.;C:php5pear')
in D:testwwwrootbloglogin.php on
line 2
Warning: Cannot modify header
information - headers already sent by (output started at
D:testwwwrootbloglogin.php:2) in D:testwwwrootbloglogin.php on
line 3
4)運算的錯誤
如果出現(xiàn)不符合運算規(guī)則則出現(xiàn)錯誤:
<?php
$m=5;
$n=0;
$a=$m/$n; //0不能做除數(shù);
echo
$a;
?>
告警:
Warning:
Division by zero in D:testwwwrootbloglogin.php on
line 13
5.邏輯錯誤
邏輯錯誤時在語法上不存在的錯誤,但是從程序的功能是看是BUG,她是嘴難調(diào)試和發(fā)現(xiàn)的BUG,因為他不會拋出任何錯誤信息。唯一能看到的是程序的功能沒有實現(xiàn)。對于邏輯錯誤而言,發(fā)現(xiàn)時容易的,但查找原因卻很難。
例如:
<?php
$arr =
array("php","abc","adsf");
echo $arr[1];
?>
運行結果為 abc;
但是開發(fā)者想輸出的是php,忽略了數(shù)組時從0開始計算的