2012-07-15 75 views
5

我使用'=='做了一些字符串測試。我知道比較字符串'=='不是方式,但是我想解決一個奇怪的行爲。使用'=='的PHP字符串比較

我正在關注本頁面中的PHP文檔:http://www.php.net/manual/en/language.operators.comparison.php。這是測試我做

<?php 
    var_dump("100" == "1e2"); //outputs boolean true 
    var_dump((int) "100"); //int 100 
    var_dump((int) "1e2"); //int 1 
?> 

文檔說,當我們比較數字的字符串,PHP首先將字符串轉換爲數字,但是當我將「100」和「1E2」爲數字,他們是不相等的。比較結果應該輸出boolean false。

爲什麼這種奇怪的行爲?謝謝!

+0

順便說一句,這就是爲什麼通常最好使用'==='而不是'==',因爲結果更具可預測性! – 2012-07-15 05:07:38

回答

6

並非所有的數字都是整數。 1e2是一個浮點數(恰好可以表示爲一個整數,但不是直接可轉換爲整數)。嘗試轉換爲float真是讓人不是int S:

<?php 
    var_dump("100" == "1e2"); // bool(true) 
    var_dump((float) "100"); // float(100) 
    var_dump((float) "1e2"); // float(100) 
?> 
+1

爲了擴大這一點,這裏是文檔中的解釋。 http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion「如果字符串不包含任何'。','e'或' E'並且數字值適合整數類型限制(由PHP_INT_MAX定義),則字符串將被評估爲整數,在所有其他情況下,它將被評估爲浮點數。 – 2012-07-15 05:07:26

1

Type Juggling如果操作數是浮點數,則兩個操作數都計算不等於Type Casting

從類型戲法頁面

作爲花車,結果將是一個浮動。否則,操作數將被解釋爲整數,結果也將是一個整數。