这个嵌套的三元表达式是如何工作的?

How does this nested ternary expression work?

我在 php 中制作了一个 clamp() 函数,并决定使用嵌套的三元表达式来尝试一下。 最后,我解决了这个(工作)功能:

function clamp($value, $min, $max){
    return 
          $value<$min ? $min
        : ($value>$max ? $max
        : $value);
}

但是,为什么第二个表达式需要括号?之后我尝试删除它们:..

function clamp($value, $min, $max){
    return 
          $value<$min ? $min
        : $value>$max ? $max
        : $value;
}

...但在这个版本中,如果 $value 小于 $min,它将 return $max。我就是不明白这个结果是怎么来的。

我听说 php 有 "left associativity" 三元,虽然我一直不明白它是什么意思:


$bool ? "a" : $bool ? "b" : "c"
右结合律为:$bool ? "a" : ($bool ? "b" : "c")
左结合律为:($bool ? "a" : $bool) ? "b" : "c"
所以最后 php 将始终评估为 b 或 c.

奖金:
$bool ? $bool ? "c" : "b" : "a"
这是我认为不会根据关联性改变含义的语法。 我想知道人们是否设法为这个变体找到一个漂亮的缩进。