运算符优先级&&和?

问题描述 投票:1回答:1

我在读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个回答
0
投票

来自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']成为表达式,因此可以按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.