- 相關(guān)推薦
PHP中容易出錯(cuò)的小細(xì)節(jié)
細(xì)節(jié)決定成敗,那么在PHP中有哪些小細(xì)節(jié)是容易出錯(cuò)的呢?一起來(lái)看看吧!希望對(duì)大家有所幫助,更多內(nèi)容請(qǐng)關(guān)注應(yīng)屆畢業(yè)生網(wǎng)!
注意echo和print的區(qū)別
PHP中echo和print都是輸出的作用,但是兩者之間還是有細(xì)微的差別。echo輸出后沒(méi)有返回值,但print有返回值,當(dāng)其執(zhí)行失敗時(shí)返回flase。因此可以作為一個(gè)普通函數(shù)來(lái)使用,例如執(zhí)行$r = print "Hello World"; 變量$r的值將為1。而且代碼中echo語(yǔ)句的運(yùn)行效率要略快于print語(yǔ)句。
注意空字符串('')和NULL的區(qū)別
PHP中空字符串和NULL都是以值為0存儲(chǔ)的,但是他們的類型并不一樣,前者是string,而后者是NULL,可見(jiàn)字符串('')、NULL值相等但類型不等。
分清==(等于)和===(全等于)的區(qū)別
兩者都屬于比較運(yùn)算符,==(等于)只比較值是否相等,而===(全等于)則不但比較值是否相等,還會(huì)比較類型是否相等,它更為嚴(yán)格。
分清include與require的區(qū)別
include()與require()的功能也基本相同,但在用法上也有一些不同,include()是有條件包含函數(shù),而require()則是無(wú)條件包含函數(shù)。例如在下面代碼中,如果變量$a為真,則將包含文件a.php。而require()則和include()不同,不管$a取何值,下面的代碼都會(huì)把文件a.php包含,比如:
在錯(cuò)誤處理方面,使用include語(yǔ)句,如果發(fā)生包含錯(cuò)誤,程序?qū)⑻^(guò)include語(yǔ)句,雖然會(huì)顯示錯(cuò)誤信息但是程序還是會(huì)繼續(xù)執(zhí)行。但是,require語(yǔ)句會(huì)提示一個(gè)致命錯(cuò)誤。
注意isset和 empty的區(qū)別
empty是判斷一個(gè)變量是否為“空”,而isset則是判斷一個(gè)變量是否已經(jīng)被設(shè)置。
分清self :: 和 this--> 的區(qū)別
在訪問(wèn)PHP類中的成員變量或方法時(shí),如果被引用的變量或者方法被聲明成const(常量)或者static(靜態(tài)屬性),那么就必須使用域操作符::,而如果被引用的變量或者方法沒(méi)有被聲明成const或者static,那么就使用指向操作符->。
foreach循環(huán)后留下懸掛指針
這里有個(gè)問(wèn)題很多人會(huì)迷糊。循環(huán)結(jié)束后,$value并未銷毀,$value其實(shí)是數(shù)組中最后一個(gè)元素的引用,這樣在后續(xù)對(duì)$value的使用中,如果不知道這一點(diǎn),會(huì)引發(fā)一些莫名奇妙的錯(cuò)誤:)看看下面這段代碼:
上面代碼的運(yùn)行結(jié)果如下:
1,2,3
1,2,3
1,2,2
你猜對(duì)了嗎?為什么是這個(gè)結(jié)果呢?
我們來(lái)分析下。第一個(gè)循環(huán)過(guò)后,$value是數(shù)組中最后一個(gè)元素的引用。第二個(gè)循環(huán)開(kāi)始:
第一步:復(fù)制$arr[0]到$value(注意此時(shí)$value是$arr[2]的引用),這時(shí)數(shù)組變成[1,2,1]
第二步:復(fù)制$arr[1]到$value,這時(shí)數(shù)組變成[1,2,2]
第三步:復(fù)制$arr[2]到$value,這時(shí)數(shù)組變成[1,2,2]
綜上,最終結(jié)果就是1,2,2
避免這種錯(cuò)誤最好的辦法就是在循環(huán)后立即用unset函數(shù)銷毀變量:
忽略Unicode/UTF-8問(wèn)題
php編程中,在處理非ascii字符時(shí),會(huì)遇到一些問(wèn)題,要很小心的去對(duì)待,要不然就會(huì)錯(cuò)誤遍地。舉個(gè)簡(jiǎn)單的例子,strlen($name),如果$name包含非ascii字符,那結(jié)果就有些出乎意料。在此給出一些建議,盡量避免此類問(wèn)題:
最好使用mb_*函數(shù)來(lái)處理字符串,避免使用老的字符串處理函數(shù)。這里要確保PHP的“multibyte”擴(kuò)展已開(kāi)啟。
數(shù)據(jù)庫(kù)和表最好使用unicode編碼。
知道json_code()函數(shù)會(huì)轉(zhuǎn)換非ascii字符,但serialize()函數(shù)不會(huì)。
php代碼源文件最好使用不含bom的utf-8格式。
【PHP中容易出錯(cuò)的小細(xì)節(jié)】相關(guān)文章:
科目二中最容易出錯(cuò)的小細(xì)節(jié)02-09
駕考科目二中最容易出錯(cuò)的小細(xì)節(jié)05-29
科目二中最容易出錯(cuò)的三個(gè)小細(xì)節(jié)05-16
科目三哪些細(xì)節(jié)容易出錯(cuò)03-23
有關(guān)科目三容易出錯(cuò)的細(xì)節(jié)參考04-16
駕考科目三容易出錯(cuò)的情況細(xì)節(jié)03-23
駕考科目三容易出錯(cuò)的細(xì)節(jié)是什么07-25