【问题标题】:do lower precedence operators associate non-associative higher precedence operators?低优先级运算符是否关联非关联的高优先级运算符?
【发布时间】:2013-10-14 06:24:13
【问题描述】:

">=" 和 "==" 是非关联运算符,当它们彼此相邻时,它们会按优先级计算:

2 >= 3 == 3

就像:

(2 >= 3) == 3 // ">=" have higher precedence over "=="

但如果混合中有关联运算符,甚至更低优先级的运算符,它会根据关联运算符进行评估:

var_dump($a = 2 >= $b = 3 == 3); // bool(true)
var_dump(2 >= 3 == 3); // bool(false)

类似的:

var_dump($a = 2 >= ($b = 3 == 3));
var_dump((2 >= 3) == 3); 

我理解正确吗?

【问题讨论】:

    标签: php operators


    【解决方案1】:

    PHP 总是只解析定义的方式。并且赋予变量赋值更高的(隐式)优先级是必要的,因为赋值的左侧必须是一个变量。无法解析为($a = 2 >= $b) = 3 == 3。它不依赖于关联性。

    看这个例子; & 运算符是关联的(而 => 不是)。

    $b = 2;
    $a = 2 >= $b & 2;
    

    在这种情况下,它是从左到右的。喜欢:

    var_dump($a = ((2 >= $b) & 2)); // int (0)
    var_dump($a = 2 >= $b & 2); // int (0)
    

    比较:

    var_dump($a = (2 >= ($b & 2))); // bool (true)
    

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 1970-01-01
      • 2012-08-13
      • 2021-03-05
      • 1970-01-01
      • 2019-11-06
      • 2011-07-07
      相关资源
      最近更新 更多