是!$节日和$ festive = = FALSE相同?

时间:2012-11-07 11:59:04

标签: php boolean logical-operators

我怀疑几行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;相同吗?

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

是的,确实如此。 如果您改为执行:$festive === FALSE,则会有所不同,因为在这种情况下,“falsy”的$festive值将不会返回true,因为它们不完全为FALSE。

答案 1 :(得分:1)

所有关于数据类型以及PHP如何将非布尔类型的不同值视为“false”。请查看以下代码段来说明这一点:

<?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)

答案 2 :(得分:1)

任何if()表达式都会被评估为falsetrue。如果expression不是显式布尔值,则将其转换为布尔值,然后进行求值。 Here is how PHP converts certain types to boolean。通常,如果值(数字,非布尔值)非零,则将其视为TRUESee this document以了解有关PHP如何评估表达式的更多信息。

因此,在您的情况下$d>0根据$d实数值计算布尔值,而对于!$festive$festive首先转换为布尔值然后否定({{1} },即如果!是数字值$festive,则将其转换为2(非零)然后否定,以便TRUE表达式求值为{{1 }}

附加说明:由于您的逻辑条件为!$festiveFALSE),如果将AND评估为&&$d>0将不会被评估为到期日Boole的代数false 总是 !$festive