2016-02-11 42 views
0

我遇到過很多occations上的這個php「錯誤」,但我從來沒有停止過關於它的事情。所以這是我要求別人幫我明白這一點:檢查0是否等於任何字符串總是返回true

$int = 0; 
var_dump($int == "string"); 
var_dump(false == "string"); 
var_dump(false == $int); 
+4

http://us3.php.net/types.comparisons –

+0

由於發現該網址的回答澄清在這種情況下的答案是:「這是真的,因爲該字符串interally到鑄造一個整數,任何字符串(不是以數字開頭),當被轉換爲一個整數時,將是0.「 – Touchpad

+1

[爲什麼(0 =='Hello')在PHP中返回true?](http://stackoverflow.com/questions/5894350/why-does-0-hello-return-true-in-php) –

回答

2

PHP手冊有一個類型Comparison Table它,它給你比較兩個不同的數據類型的變量時,會發生什麼的想法。

您的第一個示例(「鬆散」比較,因爲它不會檢查兩個操作數的數據類型)會將左側的字符串隱式轉換爲整數。由於它不以數字開頭,字符串被轉換爲整數0,它等於整數0.

第二個示例不僅比較了值,還比較了類型。由於類型不同,所以比較是錯誤的。

From this post

+0

偉大的答案隊友我會接受這個asap =) – Touchpad

0

在PHP中,==操作符檢查兩個值相等的 - 換句話說,PHP將使用在需要類型雜耍,但事情好像0 ==假,1 =='1'等將是真實的。

要檢查兩個值是否相同(包括類型),請使用===運算符。

2

我們使用==進行寬鬆比較,並使用===進行嚴格比較。

$int = 0; 
var_dump($int === "string"); //false 
var_dump(false === "string"); //false 
var_dump(false === $int); //false 
+0

我知道如何解決它我一直在問爲什麼,我發現爲什麼在鏈接共享@ divyesh-savaliya – Touchpad

+0

0是一個整數,所以在這種情況下,它將投入'字符串'爲int。這不能解析爲一個,並將變爲0.一個字符串'0string'將變爲0,並且會匹配! – Daan

+0

'false == 0'也一樣。當解析0作爲布爾值時,它變成'false'。 'true == anyothernumber'也一樣# – Daan

相關問題