0

我在 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;
}

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

4

1 回答 1

0

我听说 php 与三元有“左关联性”,但我从来不明白它的含义:


$bool ? "a" : $bool ? "b" : "c"
右关联性是:$bool ? "a" : ($bool ? "b" : "c")
左关联性是:($bool ? "a" : $bool) ? "b" : "c"
所以最后 php 将始终评估为 b 或 c。

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

于 2017-07-12T18:50:16.110 回答