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

來源:互聯網
上載者:User

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

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

更加詳細的比較規則, 多種類型的比較規則, 在 PHP手冊/語言參考/運算子/比較子 可以找到.

在PHP裡當兩個數字型字串(只含數位字串)進行比較的時候是直接轉換成數值進行比較的
如下樣本:(注意$a和$b兩個變數的最後一位不相等)

複製代碼 代碼如下://樣本1
<?php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>

運行上面的程式卻發現結果為equal(非我們認為的結果)

我們把$a與$b分別加一個字母a進去

複製代碼 代碼如下://樣本2
<?php
$a = 'a511203199106034578';
$b = 'a511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>

這次輸出的是notEqual(正確的結果)

樣本1為equal是因為PHP把兩個數字型字串轉換成數字型,而這兩個數字剛好相等如下樣本 複製代碼 代碼如下:<?php
$a = 511203199106034578;
$b = 511203199106034579;
echo $a; // 輸出 5.1120319910603E+17 即511203199106030000
echo $b; // 輸出 5.1120319910603E+17 即511203199106030000
?>

所以我們在樣本1中得到的結果是equal

避免出現這種非預期結果的情況是使用類型比較符===如下樣本(如果 $a 等於 $b,並且它們的類型也相同) 複製代碼 代碼如下://樣本4
<?php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a===$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.