【问题标题】:Operator Precedence && and?运算符优先级 && 和?
【发布时间】:2020-03-05 13:58:49
【问题描述】:

我是在阅读https://www.php.net/manual/en/language.operators.precedence.php 说 && 绑定比 ?? ?

为什么设计用于提供可选数组元素的“默认值”的构造不能非常紧密地绑定到该元素?

$ok = $ok && $someArray['optionalElement'] ?? true;      // Wrong
$ok = $ok && ( $someArray['optionalElement'] ?? true );  // Right

【问题讨论】:

    标签: php operator-precedence


    【解决方案1】:

    来自 PHP 文档

    https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

    已添加空合并运算符 (??) 作为语法糖,用于需要将三元组与 isset() 结合使用的常见情况。如果存在且不为 NULL,则返回其第一个操作数;否则返回第二个操作数。

    由此,空值合并器将其剩余的所有内容视为isset() 的表达式参数

    所以$ok && $someArray['optionalElement'] 被视为一个完整的表达式。

    ( $someArray['optionalElement'] ?? true ) 括在括号中只会导致$someArray['optionalElement'] 成为表达式,因此它可以正常工作。

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 1970-01-01
      • 2021-03-29
      • 2013-07-31
      • 1970-01-01
      • 2023-03-07
      • 2011-07-07
      相关资源
      最近更新 更多