【问题标题】:Operators precedence of "or" and assignment“或”的运算符优先级和赋值
【发布时间】:2013-03-27 23:31:15
【问题描述】:

今天发现了一些有趣的代码sn-p。简化后如下所示:

$var = null;

$var or $var = '123';

$var or $var = '312';

var_dump($var);

问题是,据我所知,precedence of assignment is higher that OR,所以,我认为,var_dump 应该输出 312(第一个 - 分配,第二个 - 逻辑比较)。但结果不同,我得到123(首先 - 检查$var 是否转换为true,其次 - 如果不是,分配值)。

问题是它是如何工作的?

为什么or|| 的行为相同?

【问题讨论】:

    标签: php operators assignment-operator


    【解决方案1】:

    您可以在Logical Operators 中查看有关此行为的示例

    你也可以阅读关于Short-circuit evaluation的文章

    短路表达式x Sand y(用Sand表示短路变体)等价于条件表达式if x then y else false;,表达式x Sor y等价于if x then true else y

    在 php 中。

    return x() and y();
    

    等于

    if (x())
      return (bool)y();
    else
      return false;
    

    return x() or y();
    

    等于

    if (x())
      return true;
    else
      return (bool)y();
    

    所以,交易不只是优先。

    【讨论】:

    • 有道理!谢谢!所以,原因是Short-circuit operators are, in effect, control structures rather than simple arithmetic operators
    【解决方案2】:

    同理

    $var = null;
    
    if(!$var)$var = '123';
    if(!$var)$var = '321';
    
    var_dump($var);
    

    【讨论】:

    • 我知道这些是一样的。我想知道它是如何工作的
    • 只有当or之前的语句是empty/false/null/etc...时,它才会在or(在你的情况下是$var = '123';)之后执行字符串
    猜你喜欢
    • 2015-08-24
    • 1970-01-01
    • 2018-08-14
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    相关资源
    最近更新 更多