2012-11-07 63 views
2

我對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;

任何幫助表示讚賞。

+0

不,這不是,但在某種程度上,它是。 !$節日,是「不歡樂」,所以它也會匹配undefined或null這樣的東西,因爲這將是「不」,同時檢查「false」只會匹配,如果它「完全」爲false; – adeneo

+2

其實,是的,你在考慮「===」,它不符合「false」,除非$ festive是完全錯誤的。 – Deleteman

+0

@Deleteman和adeneo:謝謝! – ContentiousMaximus

回答

2

是的,它是。 這是不同的,如果你不是做:$festive === FALSE因爲在這種情況下,是「falsy」的$festive值將不會返回true,因爲他們不完全是FALSE。

+0

好的,完美的,非常感謝。 – ContentiousMaximus

+0

很高興爲您提供幫助。如果您認爲它涵蓋了您的問題,那麼接受答案也是正確的,這也被認爲是一種好的做法。 – Deleteman

+0

好的,對不起。我投你的答案,即使這裏的任何其他答案(包括評論)也很好。 – ContentiousMaximus

1

這是關於數據類型,以及如何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) 
1

任何if()表達被評估爲要麼falsetrue。如果表達式不是顯式布爾值,那麼它將轉換爲布爾值,然後進行求值。 Here is how PHP converts certain types to boolean。一般情況下,如果值(數字,非布爾)是非零,它被認爲是TRUESee this document瞭解更多關於PHP如何評估表達式的信息。

所以你的情況$d>0評估取決於$d真正的價值布爾值,而!$festive$festive是先轉換爲布爾,然後否定(!,即如果$festive是數字小值2,然後將其轉化爲TRUE(非-Zero),然後取反所以!$festive表達式求FALSE

附加說明:。因爲你的邏輯條件是AND&&),如果$d>0被評估以false!$festive不會通過電子郵件取值爲由於布爾的代數false && <anything>總是false