PHP字符串 ==比較運(yùn)算符的副作用
更新時(shí)間:2009年10月21日 14:17:44 作者:
PHP字符串 ==比較運(yùn)算符的副作用,大家可以參考下。
復(fù)制代碼 代碼如下:
$a = '212345678912000005';
$b = '212345678912000001';
var_dump($a == $b);
這段代碼的輸出是bool(true), 說明這樣判斷會得出結(jié)論是兩者相等. 類似的特性在in_array()函數(shù)第3個(gè)參數(shù)為false或者不設(shè)置的情況. 原因是首先判斷字符串是否是數(shù)字, 然后轉(zhuǎn)換成long或者double(C語言數(shù)據(jù)類型)再判斷 - 使用zendi_smart_strcmp. 但是, 源碼中的注釋說聲明考慮了溢出的情況,
復(fù)制代碼 代碼如下:
} else if (dval1 == dval2 && !zend_finite(dval1)) {
/* Both values overflowed and have the same sign,
* so a numeric comparison would be inaccurate */
goto string_cmp;
}
dval1和dval2分別是兩個(gè)字符串轉(zhuǎn)換為double型后的值. 但為什么還是這樣呢? 也許這個(gè)判斷并不正確. 進(jìn)一步研究再說...
解決方法, 使用三個(gè)等號"==="代替兩個(gè)等號"==", in_array()函數(shù)設(shè)置第三個(gè)參數(shù)為true: in_array('val', $array, true).
您可能感興趣的文章:
- php && 邏輯與運(yùn)算符使用說明
- php中的三元運(yùn)算符使用說明
- PHP學(xué)習(xí) 運(yùn)算符與運(yùn)算符優(yōu)先級
- php下使用strpos需要注意 === 運(yùn)算符
- 用PHP中的 == 運(yùn)算符進(jìn)行字符串比較
- php foreach 使用&(與運(yùn)算符)引用賦值要注意的問題
- PHP 作用域解析運(yùn)算符(::)
- php合并數(shù)組array_merge函數(shù)運(yùn)算符加號與的區(qū)別
- PHP三元運(yùn)算符的結(jié)合性介紹
- PHP常用特殊運(yùn)算符號和函數(shù)總結(jié)(php新手入門必看)
- php三元運(yùn)算符知識匯總
- php 運(yùn)算符與表達(dá)式詳細(xì)介紹
相關(guān)文章
PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之類與反射API詳解
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之類與反射API,結(jié)合實(shí)例形式較為詳細(xì)的分析了類的驗(yàn)證、檢查、傳參及反射API等概念與操作技巧,需要的朋友可以參考下2016-12-12
set_include_path和get_include_path使用及注意事項(xiàng)
set_include_path 設(shè)置默認(rèn)包含路徑,本文將介紹下其的使用方法,及注意事項(xiàng),感興趣的朋友可以了解下,或許對你學(xué)習(xí)php有所幫助2013-02-02
JS中encodeURIComponent函數(shù)用php解碼的代碼
在JS中使用了encodeURIComponent對中文進(jìn)行編碼在PHP中使用iconv('UTF-8','gb2312',$q);就可以得到你需要的字串了,其中g(shù)b2312根據(jù)你實(shí)際應(yīng)用來定如還不明白為什么看下面的文章2012-03-03

