Как работает это вложенное троичное выражение?

Я делал функцию Clamp() в php и решил использовать вложенное троичное выражение, чтобы попробовать его. В итоге я остановился на этой (рабочей) функции:

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, Я просто не понимаю, как это получается.

1 ответ

Решение

Я слышал, что у php "левая ассоциативность" с троичным, хотя я так и не понял, что это значит:

принимать
$bool ? "a" : $bool ? "b" : "c"
Правильная ассоциативность это: $bool ? "a" :($bool ? "b" : "c")
Левая ассоциативность это: ($bool ? "a" : $bool)? "b" : "c"
Таким образом, в конце концов php всегда будет оцениваться как b или c.

Бонус:
$bool ? $bool ? "c" : "b" : "a"
Вот синтаксис, который, я думаю, не изменит смысл на основе ассоциативности. Интересно, удалось ли людям найти красивый отступ для этого варианта.

Другие вопросы по тегам