我对几行 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
因为在这种情况下,$festive
“假”的值不会返回真,因为它们不完全是假的。
这完全是关于数据类型以及 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
。如果表达式不是显式布尔值,则将其转换为布尔值,然后进行评估。下面是 PHP 如何将某些类型转换为 boolean的。一般来说,如果 value (numeric, non-boolean)不为零,则认为是TRUE
。请参阅此文档以了解有关 PHP 如何评估表达式的更多信息。
因此,在您的情况下$d>0
,根据$d
实际值评估为布尔值,而对于!$festive
首先$festive
转换为布尔值然后取反 ( !
,即如果$festive
是数字值2
,则将其转换为TRUE
(非零),然后取反,因此!$festive
表达式评估为FALSE
.
附加说明:由于您的逻辑条件是AND
( &&
),因此 if$d>0
被评估为false
将不会被!$festive
评估,因为布尔代数false && <anything>
总是。 false