代码之家  ›  专栏  ›  技术社区  ›  Aldos

PHP null coalesce+三元运算符奇怪的行为

  •  4
  • Aldos  · 技术社区  · 7 年前

    在将新的PHP7空合并运算符与三元运算符一起使用时,我面临着意外的行为。

    具体情况(虚拟代码):

    function a()
    {
        $a = 1;
        $b = 2;
        return $b ?? (false)?$a:$b;
    }
    
    var_dump(a());
    

    谁能解释一下为什么?

    3 回复  |  直到 7 年前
        1
  •  6
  •   jeroen    7 年前

    您的空格并不反映php计算表达式的方式。请注意 ?? higher precedence

    结果如下:

    ($b ?? false) ? $a : $b;
    

    这就是 $a $b 不是 null 或评估为 false

        2
  •  3
  •   raidenace    7 年前

    检查报表 return $b ?? (false)?$a:$b;

    $b ?? (false) 然后将其结果传递给 ? $a:$b ;

    b美元??(假) not null and isset 值,在本例中为 $b

    $b = 2

    ($b) ? $a : $b 返回的值为 $a 这就是 int(1)

    ($b ?? (false)) ? $a : $b;

    我们不需要添加额外的括号,因为 ?? ?

        3
  •  0
  •   Stephen Kennedy annamataws    6 年前
    return $b ?? (false)?$a:$b; // will return 1
    
    return $b ?? ((false)?$a:$b); // will behave as you wanted