PHP Boolean 型態的 True 與 字串做 == 的比對,可能會跟預期的不太一樣。
PHP True 與 字串型態比對的注意事項
$a = true; 而 $a 要跟字串做比對,或者字串(非 0)要跟 true 做比對,都會是 true。
主要是發生在下述的情況,預期結果都應該要印出 'b',但是結果印出 'a'
<?php $a = true; echo ($a == 'd' || $a == false) ? 'a' : 'b'; // a ?>
解法:使用 === 含型態判斷,因為 'd' 的字串,等同 1 也等同 true,所以要避免這個問題,使用下述作法即可。
<?php $a = true; echo ($a === 'd' || $a === false) ? 'a' : 'b'; // b ?>
以下是更多的案例,可以參考看看
<?php $a = true; var_dump($a == 'd'); // true var_dump($a == true); // true var_dump($a == 1); // true var_dump($a == 0); // false var_dump($a == false); // false var_dump($a === 'd'); // false var_dump($a === false); // false ?>
想到有個 PHP type comparison tables 可以對照還不錯 ^_^
https://secure.php.net/manual/en/types.comparisons.php
嗯嗯,感謝提供~
這個對照表看是看,但是跟實際遇到的時候,感覺不一樣~ XD