2014-02-28 38 views
-1

爲什麼這個打印錯誤。是因爲month是字符串而true是布爾值?爲什麼這在php中等於false

$month = "string"; 
if ($month === true) { 
    echo "true"; 
} else { 
    echo "false"; 
} 
+0

是否定義了$月? – Daan

+1

你還期望什麼? – Rikesh

+2

閱讀友好手冊 - http://www.php.net/manual/en/language.operators.comparison.php - 它的解釋非常明確 –

回答

1

當使用'==='時,您正在按值和按類型進行比較。由於$month = 'string';明顯是字符串類型,因此它不等於布爾型true,因此表達式計算結果爲false。

要使它輸出「真」,以取代「===」操作符「==」

下面就來這裏SO一個question它概括起來鏈接很好

2

===是比較運營商的價值類型,所以$month必須是boolean(當然也true)。是嗎?

您應該使用$month == true(將僅比較值,無論哪種類型),或者簡單if($month)(如不存在幾個月,可能是0)

1

是。

==用於比較,但使用===(注意額外的'='符號)也將檢查數據的類型。 因爲$ month包含一個字符串,並且您將它與一個布爾值進行比較,它將返回false。

當你使用==時,它會返回true。

0

如果您還沒有聲明$ month變量,則在條件時間。那麼$ month將是未定義的,'==='true將始終返回false。

+0

任何針對$ month的測試都將返回false,除了'is_null()'將提供一個'E_NOTICE'並返回true,'empty()'將返回true –

+0

忽略上述註釋的「E_NOTICE」部分,如果運行未聲明的變量,該測試將觸發'E_NOTICE'。 –