PHP容易被忽略而出錯(cuò)陷阱 數(shù)字與字符串比較
0 與任意非數(shù)字(或者說(shuō),不可轉(zhuǎn)化為數(shù)字的字符)前導(dǎo)的字符串比較(操作符為==), 均返回 true.
原因是, 數(shù)字與字符串比較時(shí), 先嘗試將字符串轉(zhuǎn)換為數(shù)字, 再比較, 一個(gè)不能轉(zhuǎn)換為數(shù)字的字符串, 轉(zhuǎn)換結(jié)果為0, 故, 與0比較總返回 true.
更加詳細(xì)的比較規(guī)則, 多種類型的比較規(guī)則, 在 PHP手冊(cè)/語(yǔ)言參考/運(yùn)算符/比較運(yùn)算符 可以找到.
在PHP里當(dāng)兩個(gè)數(shù)字型字符串(只含數(shù)字的字符串)進(jìn)行比較的時(shí)候是直接轉(zhuǎn)換成數(shù)值進(jìn)行比較的
如下示例:(注意$a和$b兩個(gè)變量的最后一位不相等)
//示例1
<?php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>
運(yùn)行上面的程序卻發(fā)現(xiàn)結(jié)果為equal(非我們認(rèn)為的結(jié)果)
我們把$a與$b分別加一個(gè)字母a進(jìn)去
//示例2
<?php
$a = 'a511203199106034578';
$b = 'a511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>
這次輸出的是notEqual(正確的結(jié)果)
示例1為equal是因?yàn)镻HP把兩個(gè)數(shù)字型字符串轉(zhuǎn)換成數(shù)字型,而這兩個(gè)數(shù)字剛好相等如下示例
<?php
$a = 511203199106034578;
$b = 511203199106034579;
echo $a; // 輸出 5.1120319910603E+17 即511203199106030000
echo $b; // 輸出 5.1120319910603E+17 即511203199106030000
?>
所以我們?cè)谑纠?中得到的結(jié)果是equal
避免出現(xiàn)這種非預(yù)期結(jié)果的情況是使用類型比較符===如下示例(如果 $a 等于 $b,并且它們的類型也相同)
//示例4
<?php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a===$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>
這樣我們就可以得到預(yù)期中的notEqual了
相關(guān)文章
PHP內(nèi)置的Math函數(shù)效率測(cè)試
這篇文章主要介紹了PHP內(nèi)置的Math函數(shù)效率測(cè)試,以實(shí)例形式測(cè)試了相關(guān)的PHP內(nèi)置數(shù)學(xué)運(yùn)算函數(shù)的執(zhí)行時(shí)間,分析其運(yùn)行效率,需要的朋友可以參考下2014-12-12
php使用Image Magick將PDF文件轉(zhuǎn)換為JPG文件的方法
這篇文章主要介紹了php使用Image Magick將PDF文件轉(zhuǎn)換為JPG文件的方法,涉及php使用Image Magick擴(kuò)展操作圖片的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
探究Laravel使用env函數(shù)讀取環(huán)境變量為null的問(wèn)題
最近在工作中遇到一個(gè)問(wèn)題,不知道大家有沒(méi)有遇到過(guò),在 Laravel中(除 app/config 目錄下的配置文件中)使用env函數(shù)讀取環(huán)境變量,有時(shí)有用,有時(shí)返回 null,這究竟怎么回事?下面通過(guò)這篇文章讓我們一探究竟。有需要的朋友們下面來(lái)一起看看吧。2016-12-12
php調(diào)用C代碼的實(shí)現(xiàn)方法
本篇文章主要是對(duì)php調(diào)用C代碼的實(shí)現(xiàn)方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-03-03
redis+php實(shí)現(xiàn)微博(一)注冊(cè)與登錄功能詳解
這篇文章主要介紹了redis+php實(shí)現(xiàn)微博注冊(cè)與登錄功能,結(jié)合實(shí)例形式分析了php結(jié)合redis實(shí)現(xiàn)微博注冊(cè)及登錄相關(guān)操作步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-09-09
PHPCrawl爬蟲庫(kù)實(shí)現(xiàn)抓取酷狗歌單的方法示例
這篇文章主要介紹了PHPCrawl爬蟲庫(kù)實(shí)現(xiàn)抓取酷狗歌單的方法,涉及PHPCrawl爬蟲庫(kù)的使用及正則匹配相關(guān)操作技巧,需要的朋友可以參考下2017-12-12

