我怀疑几行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 :(得分: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()
表达式都会被评估为false
或true
。如果expression不是显式布尔值,则将其转换为布尔值,然后进行求值。 Here is how PHP converts certain types to boolean。通常,如果值(数字,非布尔值)非零,则将其视为TRUE
。 See this document以了解有关PHP如何评估表达式的更多信息。
因此,在您的情况下$d>0
根据$d
实数值计算布尔值,而对于!$festive
,$festive
首先转换为布尔值然后否定({{1} },即如果!
是数字值$festive
,则将其转换为2
(非零)然后否定,以便TRUE
表达式求值为{{1 }}
附加说明:由于您的逻辑条件为!$festive
(FALSE
),如果将AND
评估为&&
,$d>0
将不会被评估为到期日Boole的代数false
总是 !$festive
。