疑問首選,給出一個php的範例程式碼,如果你完全明白為什麼會出現如下結果,就不需要再在這篇部落格浪費時間了,這裡是讓php初學者注意一下可能會犯的錯誤
<?phpvar_dump("abcdefg" == "0"); // bool(false)var_dump("abdsafd" == 0); // bool(true)
如果你不是太清楚上面的結果,那就跟著部落格繼續學習下去吧!比較子比較子,如同它們名稱所暗示的,允許對兩個值進行比較。
比較子
例子 |
名稱 |
結果 |
$a == $b |
等於 |
TRUE,如果$a等於$b |
$a === $b |
全等 |
TRUE,如果$a等於$b,並且它們的類型也相同 |
$a != $b |
不等 |
TRUE,如果$a不等於$b |
$a <> $b |
不等 |
TRUE,如果$a不等於$b |
$a !== $b |
非全等 |
TRUE,如果$a不等於$b,或者它們的類型不同 |
$a < $b |
小於 |
TRUE,如果$a嚴格小於$b |
$a > $b |
大於 |
TRUE,如果$a嚴格大於$b |
$a <= $b |
小於等於 |
TRUE,如果$a小於或者等於$b |
$a >= $b |
大於等於 |
TRUE,如果$a大於或者等於$b |
注意:
- 如果比較一個整數和字串,則字串會被轉換為整數
- 如果比較兩個數字字串,則作為整數比較
講到這裡,就可以說一下上面那個php代碼了,var_dump("abcdefg" == "0")為false,是因為這是兩個字串比較,對應於c的strcmp函數,因此應該為false。然而,var_dump("abdsafd" == 0)為true,則需要學習一下字串轉換為整數的規則了字串轉換為整數當一個字串被用在了一個數位環境中,結果和類型如下:如果字串沒有包含‘.’、'e'或'E',並且數字值符合整數類型的限定(PHP_INT_MAX定義的),這個字串可被認定是一個integer,在其它情況下被認定為一個float字串的開始部分給定了它的值,如果字串以合法的數字開始,這個數字就可直接使用。否則,值就是0.合法數值由符號,後面跟著一個或多個數字(可能有個小數點),再跟著可選的指數符號如'e'或'E',後面跟著一個或多個數字。範例程式碼:
<?php$foo = 1 + "10.5"; // $foo is float (11.5)$foo = 1 + "bob-1.3e3"; // $foo is integer (1)$foo = 1 + "bob3"; // $foo is integer (1)$foo = 1 + "10 Small Pigs"; // $foo is integer (11)$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)$foo = "10.0 pigs " + 1; // $foo is float (11)$foo = "10.0 pigs " + 1.0; // $foo is float (11)?>
這裡應該可以徹底解釋var_dump("abcdefg" == 0)為true了,因為比較子首先將“abcdefg”強制轉換為整數0,因為0==0為true了參考連結http://php.net/manual/zh/language.operators.comparison.phphttp://www.php.net/manual/zh/language.types.string.php#language.types.string.conversion