2012-03-17 76 views
5

在PHP 5PHP空var == 0?

$my_var = ""; 

    if ($my_var == 0) { 
    echo "my_var equals 0"; 

    } 

爲什麼它判斷爲真?在php.net中有關於它的一些參考?

回答

1

在您的第一行中,您將$my_var定義爲字符串。

在比較中,您將該變量與一個常量整數進行比較。

如果你想精確比較(我不知道爲什麼你需要比較整數的字符串沒有任何施法),你應該使用===

if ($my_var === 0) { 
    echo "my_var equals 0"; 
} 

永遠不會回顯郵件。

PHP手冊中Comparison Operators section操作==定義,如:

TRUE,如果$ a等於$ b型雜耍之後。

所以,這裏重要的是type juggling

事實上,在PHP Manual: types comparisons中,第二個表格告訴你整數0等於字符串""

1

這是由於來自您正在使用的平等運算符的類型強制。

PHP manual有類型比較表來說明這一點。

它通常被認爲是一種很好的做法,可以使用相同的運算符===來代替,以避免這種拐角(?)情況。

0

這裏是約布爾值

http://www.php.net/manual/en/language.types.boolean.php

和在這裏的PHP手冊的參考是針對NULL值的參考

http://www.php.net/manual/en/language.types.null.php 

$my_var = ''; 

if ($my_var == 0) { 
    echo "my_var equals 0" 
} 

評估爲真,因爲「」是相同的NULL值爲false或0

3

字符串和整數不能直接與== 。所以PHP執行類型雜耍以查看是否有另一個明智的比較可用。

當一個字符串與一個整數進行比較時,該字符串首先被轉換爲一個整數。您可以找到轉換here的詳細信息。基本上,因爲""不是有效的數字,所以轉換的結果是0。因此,比較成爲0 == 0,這顯然是對的。

對於大多數(如果不是全部)您的比較,您可能希望使用標識比較===

+0

到目前爲止我一直很好==只是忘記了===存在... – JohnA 2012-03-19 23:59:50