2014-10-02 27 views
2

我很困惑,因爲PHP接受以下條件。爲什麼我的If語句在PHP中接受不正確的String條件?

<?php 
    $b = true; 
    if($b == 'anything') 
     echo 'ok'; 
    else 
     echo 'no'; 
?> 

那麼,PHP顯示ok。我仍然不明白怎麼可能。

也許,你可以幫我解釋清楚。

+5

PHP是一種鬆散的類型語言,因此可能發生鑄造。儘可能使用嚴​​格比較'$ b ==='hello'// false'。 http://php.net/manual/en/language.types.type-juggling.php – PeeHaa 2014-10-02 12:46:07

+1

將'$ b'設置爲'true',然後給'$ b'賦值都是符合'真實性'的條件。如果你需要一個嚴格的比較,請使用'===' – 2014-10-02 12:46:34

+0

[how-do-php-equality-double-equals-and-identity-triple-equals-comp](http://stackoverflow.com/questions/80646/how-do-the-php-equality-double-equal-and-identity-triple-equals-comp) – mithunsatheesh 2014-10-02 12:48:54

回答

5

這應該工作,你

$b = true; 
if($b === 'hello') 
    echo 'ok'; 
else 
    echo 'no'; 

使用== PHP時將只檢查是否值相等,而不比較值的類型,當第一個值是一個布爾值,PHP將轉換雙方BOOL,轉換任何字符串,但空字符串''和字符串'0'將返回true,這就是爲什麼你必須使用===

關注該link瞭解PHP

比較
+1

我會解釋*爲什麼*。 – 2014-10-02 13:20:07

+0

@ʰᵈˑ好了:) – MaK 2014-10-02 16:28:47

1

據對比較運算符(http://php.net/manual/en/language.operators.comparison.php==檢查「equalness」,而===檢查身份(這實際上意味着它是相同類型的,並且相同的值)PHP手冊。

當比較(爲了平等)a boolstring時,string被鑄造爲bool。按照docs

When converting to boolean, the following values are considered FALSE: 
* the boolean FALSE itself 
* the integer 0 (zero) 
* the float 0.0 (zero) 
* the empty string, and the string "0" 
* an array with zero elements

所以你的字符串'anything'變得true

相關問題