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

Php 这个嵌套的三元表达式是如何工作的?,php,ternary-operator,clamp,Php,Ternary Operator,Clamp,我正在用php编写一个clamp()函数,并决定使用一个嵌套的三元表达式进行尝试。 最后,我解决了这个(工作)功能: function clamp($value, $min, $max){ return $value<$min ? $min : ($value>$max ? $max : $value); } 功能钳位($value、$min、$max){ 返回 $value$max?$max 美元价值); } 但是,

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

function clamp($value, $min, $max){
    return 
          $value<$min ? $min
        : ($value>$max ? $max
        : $value);
}
功能钳位($value、$min、$max){
返回
$value$max?$max
美元价值);
}
但是,为什么第二个表达式周围的括号是必需的?后来我试着把它们移走:

function clamp($value, $min, $max){
    return 
          $value<$min ? $min
        : $value>$max ? $max
        : $value;
}
功能钳位($value、$min、$max){
返回
$value$max?$max
:$value;
}
。。。但在此版本中,如果
$value
小于
$min
,它将返回
$max
。我只是不明白它是如何得出这样的结果的。

我听说php与三元组具有“左关联性”,尽管我从未理解它的含义:

采取
$bool?“a$bool?“b”:“c”

右关联性是:
$bool?“a”:
($bool?“b”:“c”)

左关联性是:
($bool?:$bool)
?“b”:“c”

因此,最终php的计算结果总是b或c

奖金:
$bool$布尔?“c”:“b”:“a”

这里有一个语法,我认为它不会因为关联性而改变意思。
我想知道人们是否找到了这个变体的一个很好的缩进。

这就是为什么:与其他所有语言相比,PHP具有三元向后的关联性,这意味着如果没有parens,就无法链接它们并得到一个合理的结果。