【问题标题】:Operator "?" and operator AND evaluation操作员 ”?”和运算符 AND 评估
【发布时间】:2018-09-17 16:57:48
【问题描述】:

计算结果为 TRUE。

$A = TRUE;
$B = FALSE;

$result = ($A) AND ($B) ? true : false;

为什么评价是真的,评价是如何一步步完成的?

谢谢

【问题讨论】:

  • 请参阅 secure.php.net/manual/en/language.operators.precedence.php&& 而不是 AND 会起作用。
  • 我之前搜索过,但在该页面中我无法准确找到在这种情况下,为什么以及如何使用 AND ?评估中如何使用第二个“假”?谢谢
  • 哦! AND 的优先级低于“=”。 Ok,那么,其他的“AND”是怎么用的呢?它被拆散了吗?谢谢

标签: php evaluation operator-precedence


【解决方案1】:

与三元无关。这是因为=precedenceand 更高。这意味着您正在设置$result = ($A),然后and 之后的所有内容都无关紧要。

($B) ? true : false 确实计算结果为false,但由于赋值已经发生在表达式的第一部分,它没有被赋值给任何东西。它基本上被忽略了。

举个更直接的例子,试试

$result = true and false;

$result 将是 true

【讨论】:

    【解决方案2】:

    我最初的想法是它返回true,因为缺少括号。 原因三元表达式是从左到右计算的。见DEMO,如果你用括号括起来(),它将返回bool(false)

    $A = TRUE;
    $B = FALSE;
    
    $result = (($A) AND ($B)) ? true : false;
    var_dump($result);
    

    已编辑: 为什么以及如何使用第二个 FALSE?

    因为and/or 的优先级低于=,但||&& 的优先级高于=。例如。

    <?php
    $bool = true && false;
    var_dump($bool); // false, that's expected
    
    $bool = true and false;
    var_dump($bool); // true, ouch!
    ?>  
    

    希望现在很清楚:)。 来源http://php.net/manual/en/language.operators.precedence.php#117390

    【讨论】:

    • 谢谢 我知道换行是有效的,但是为什么要使用第二个 FALSE 呢?以及如何给出真实的,这是我对问题的兴趣。
    • @voskys。我已编辑我的答案。请再看看:)
    猜你喜欢
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 2014-11-07
    • 2014-06-08
    • 1970-01-01
    相关资源
    最近更新 更多