【问题标题】:Is !$festive the same as $festive==FALSE?!$festive 是否与 $festive==FALSE 相同?
【发布时间】:2012-11-07 11:59:03
【问题描述】:

我对几行 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 是“不喜庆”,所以它也会匹配 undefined 或 null 之类的东西,因为那也是“不”,而检查“假”只会在它“完全”为假时匹配;
  • 实际上,是的,您正在考虑 "===" 除非 $festive 完全错误,否则它不会匹配 "false"。
  • @Deleteman 和 adeneo:谢谢!

标签: php boolean logical-operators


【解决方案1】:

是的,是的。 如果你改为:$festive === FALSE 则不同,因为在这种情况下,“falsy”的 $festive 的值不会返回 true,因为它们不完全 FALSE。

【讨论】:

  • 很高兴为您提供帮助。如果您认为答案涵盖了您的问题,则接受正确答案也是一种很好的做法。
  • 好的,抱歉。我投票支持你的答案,即使这里的任何其他答案(包括 cmets)也很棒。
【解决方案2】:

这一切都与数据类型有关,以及 PHP 如何将非布尔类型的不同值视为“假”。查看下面的 sn-p 来说明这一点:

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

【讨论】:

    【解决方案3】:

    任何if() 表达式都被评估为falsetrue。如果表达式不是显式布尔值,则将其转换为布尔值,然后进行评估。 Here is how PHP converts certain types to boolean。一般来说,如果值(数字,非布尔值)非零,则认为它是TRUESee this document 了解更多关于 PHP 如何评估表达式的信息。

    因此,在您的情况下,$d&gt;0 根据$d 实际值计算为布尔值,而对于!$festive$festive 首先转换为布尔值,然后取反(!,即如果$festive 是数字值2,然后将其转换为TRUE(非零),然后取反,因此!$festive 表达式的计算结果为FALSE

    附加说明:由于您的逻辑条件是AND (&amp;&amp;),如果$d&gt;0 被评估为false,则!$festive 将不会被评估,因为布尔代数false &amp;&amp; &lt;anything&gt;总是 false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2011-01-28
      • 2013-06-21
      • 1970-01-01
      相关资源
      最近更新 更多