PHP字符串 ==比較運算符的副作用
更新時間:2009年10月21日 14:17:44 作者:
PHP字符串 ==比較運算符的副作用,大家可以參考下。
復制代碼 代碼如下:
$a = '212345678912000005';
$b = '212345678912000001';
var_dump($a == $b);
這段代碼的輸出是bool(true), 說明這樣判斷會得出結論是兩者相等. 類似的特性在in_array()函數第3個參數為false或者不設置的情況. 原因是首先判斷字符串是否是數字, 然后轉換成long或者double(C語言數據類型)再判斷 - 使用zendi_smart_strcmp. 但是, 源碼中的注釋說聲明考慮了溢出的情況,
復制代碼 代碼如下:
} 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分別是兩個字符串轉換為double型后的值. 但為什么還是這樣呢? 也許這個判斷并不正確. 進一步研究再說...
解決方法, 使用三個等號"==="代替兩個等號"==", in_array()函數設置第三個參數為true: in_array('val', $array, true).
相關文章
set_include_path和get_include_path使用及注意事項
set_include_path 設置默認包含路徑,本文將介紹下其的使用方法,及注意事項,感興趣的朋友可以了解下,或許對你學習php有所幫助2013-02-02
JS中encodeURIComponent函數用php解碼的代碼
在JS中使用了encodeURIComponent對中文進行編碼在PHP中使用iconv('UTF-8','gb2312',$q);就可以得到你需要的字串了,其中gb2312根據你實際應用來定如還不明白為什么看下面的文章2012-03-03

