首頁  >  文章  >  後端開發  >  tellmewhen字串 PHP容易被忽略而出錯陷阱 數字與字串比較

tellmewhen字串 PHP容易被忽略而出錯陷阱 數字與字串比較

WBOY
WBOY原創
2016-07-29 08:47:091430瀏覽

0 與任意非數字(或者說,不可轉化為數字的字符)前導的字符串比較(操作符為==), 均返回true.

原因是, 數字與字符串比較時, 先嘗試將字串轉換為數字, 再比較, 一個不能轉換為數字的字串, 轉換結果為0, 故, 與0比較總回傳true.

更加詳細的比較規則, 多種類型的比較規則, 在PHP手冊/語言參考/運算子/比較運算子可以找到.
在PHP裡當兩個數字型字串(只含數字的字串)進行比較的時候是直接轉換成數值進行比較的
如下範例:(注意$a和$b兩個變數的最後一個不相等)

複製程式碼 程式碼如下:


//範例1
$a = '511203195060340060 '511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?> 卻發現未完成的程式結果
?我們認為的結果)
我們把$a與$b分別加一個字母a進去




複製代碼

代碼如下://示例2

$a = 'a51
$ $b = 'a511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
>
echo 'notEqual';
}
的結果)
範例1為equal是因為PHP把兩個數字型字串轉換成數字型,而這兩個數字剛好相等如下範例


複製程式碼

程式碼如下:$b = 511203199106034579;

echo $a; // 輸出5.1120319910603E+17 即5112031903030030 輸出 $ 19910603E+17 即511203199106030000
?>


所以我們在範例1中得到的結果是equal
避免出現這種非預期結果的情況是使用類型比較符===如下示例(如果$a 等於$b,並且它們的類型也相同)


複製代碼

代碼如下:

//範例4 $a = '511203199106034578';

$b = '511203199106034579'; s {

echo 'notEqual';
}
?>


這樣我們就可以得到預期中的notEqual了


以上就介紹了tellmewhen字串 PHP容易被忽略而出錯陷阱 數字與字串比較,包括了tellmewhen字串方面的內容,希望對PHP教程有興趣的朋友有所幫助。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn