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;

任何帮助表示赞赏。

4

3 回答 3

2

是的。如果你改为这样做,那就不同了:$festive === FALSE因为在这种情况下,$festive“假”的值不会返回真,因为它们不完全是假的。

于 2012-11-07T12:02:28.067 回答
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)
于 2012-11-07T12:09:03.693 回答
1

任何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

于 2012-11-07T12:09:27.547 回答