我對PHP的幾行有疑問。
我有以下代碼:
// returns TRUE if a day is festive, FALSE otherwise
$festive = isFestive();
//
$workingDay = $d>0 && !$festive;
是$workingDay = $d>0 && !$festive
一樣寫$workingDay = $d>0 && $festive==FALSE;
?
任何幫助表示讚賞。
我對PHP的幾行有疑問。
我有以下代碼:
// returns TRUE if a day is festive, FALSE otherwise
$festive = isFestive();
//
$workingDay = $d>0 && !$festive;
是$workingDay = $d>0 && !$festive
一樣寫$workingDay = $d>0 && $festive==FALSE;
?
任何幫助表示讚賞。
是的,它是。 這是不同的,如果你不是做:$festive === FALSE
因爲在這種情況下,是「falsy」的$festive
值將不會返回true,因爲他們不完全是FALSE。
好的,完美的,非常感謝。 – ContentiousMaximus
很高興爲您提供幫助。如果您認爲它涵蓋了您的問題,那麼接受答案也是正確的,這也被認爲是一種好的做法。 – Deleteman
好的,對不起。我投你的答案,即使這裏的任何其他答案(包括評論)也很好。 – ContentiousMaximus
這是關於數據類型,以及如何PHP將把非布爾類型的不同值「假」。檢查出的後續片段來說明這一點:
<?php
$test = false;
$test2 = null;
$test3 = 0;
$test4 = '';
$test5 = array();
var_dump($test == false);
var_dump($test2 == false);
var_dump($test3 == false);
var_dump($test4 == false);
var_dump($test5 == false);
var_dump($test === false);
var_dump($test2 === false);
var_dump($test3 === false);
var_dump($test4 === false);
var_dump($test5 === false);
並且得到的輸出(格式化):
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)
bool(false)
任何if()
表達被評估爲要麼false
或true
。如果表達式不是顯式布爾值,那麼它將轉換爲布爾值,然後進行求值。 Here is how PHP converts certain types to boolean。一般情況下,如果值(數字,非布爾)是非零,它被認爲是TRUE
。 See this document瞭解更多關於PHP如何評估表達式的信息。
所以你的情況$d>0
評估取決於$d
真正的價值布爾值,而!$festive
的$festive
是先轉換爲布爾,然後否定(!
,即如果$festive
是數字小值2
,然後將其轉化爲TRUE
(非-Zero),然後取反所以!$festive
表達式求FALSE
附加說明:。因爲你的邏輯條件是AND
(&&
),如果$d>0
被評估以false
的!$festive
不會通過電子郵件取值爲由於布爾的代數false && <anything>
是總是false
。
不,這不是,但在某種程度上,它是。 !$節日,是「不歡樂」,所以它也會匹配undefined或null這樣的東西,因爲這將是「不」,同時檢查「false」只會匹配,如果它「完全」爲false; – adeneo
其實,是的,你在考慮「===」,它不符合「false」,除非$ festive是完全錯誤的。 – Deleteman
@Deleteman和adeneo:謝謝! – ContentiousMaximus