我在PHP中遇到一個奇怪的和意外的行爲,同時比較了一些字符串值。當我期望它們返回false時,下面的前兩個語句返回true。最後一條語句按預期返回錯誤。我知道PHP的Type Juggling,但我從文檔中瞭解到,當你比較像字符串和整數這樣的兩種不同數據類型時,會發生類型雜耍。在下面的例子中,雖然這兩個文字都是字符串。這是否意味着,當你在PHP中進行字符串比較時,它會檢查這兩個字符串,看看它們是否看起來像整數,如果是,則將這兩個字符串轉換爲整數,然後比較這些整數值。所以我的問題是在這種行爲發生的條件下,字符串比較在PHP中的工作原理是什麼?php字符串比較意外類型雜耍
var_dump("10" == "10.0000");
var_dump("10" == "+10.");
var_dump("10" == "10 ");
#output
bool(true)
bool(true)
bool(false)
更新
所以下面comparison involves numerical strings巴巴的答案真的幫助了讓我明白髮生了什麼事情。函數is_numeric將返回給您,不管字符串是否被認爲是數字字符串。有趣的是不被視爲數字字符串,但" 10"
是。我挖掘了PHP源代碼,我相信implementation of is_numeric位於is_numeric_string_ex函數中。從那個人可以確切地知道什麼時候PHP將字符串視爲數字字符串。
您可以使用'==='或更明確的'strcmp' /'strcasecmp'來代替接受類型玩雜耍。 – DCoder
我知道這些選項。我不在尋找替代品我希望瞭解==運算符,以及它究竟何時和爲什麼適用於類型雜耍 –
不要使用'=='運算符。像許多PHP功能一樣,它包含了太多的魔力。您可以嘗試瞭解所有類型雜耍的例外情況,但最好避免這種情況。 – GolezTrol