PHP вложенные ошибки условного оператора?

   
                return
                    true  ? 'a' :
                    false ? 'b' :
                                                           'c';

Это должно возвращать 'a', но это не так. Вместо этого он возвращает "b". Есть ли ошибка в порядке PHP обработки различных частей условных операторов?

Я получил идею от Являются ли несколько условных операторов в этой ситуации хорошей идеей?, где она работает правильно.

(true и false для примера, конечно, в реальном коде они являются операторами, которые оценивают true и false соответственно. Да, я точно знаю это)

Ответ 1

Рекомендуется избегать "складывание" тернарных выражений. РНР поведение при использовании более одного тройной оператор в пределах одного утверждение неочевидно

Из Руководство по PHP в разделе "Непонятное тернарное поведение".

Тернарные операторы оцениваются слева направо, поэтому, если вы не добавите фигурные скобки, они не будут вести себя так, как вы ожидаете. При этом будет работать следующее:

return (true ? "a" : (false ? "b" : "c"));

Ответ 2

Подозреваю, что он оценивает (true ? 'a' : false) как вход второго тернарного оператора и интерпретирует "a" как истинный. Попробуйте выполнить брекетинг соответственно.

Ответ 3

порядок операций:

>>> return true ? 'a' : false ? 'b': 'c';
'b'
>>> return true ? 'a' : (false ? 'b': 'c');
'a'

Ответ 4

Позвольте мне объяснить так же, как мне это объяснили. Но вы должны обратить внимание в скобках, чтобы понять, что происходит.

PHP

Код PHP ниже

true ? "a" : false ? "b" : "c"

Является эквивалентным:

(true ? "a" : false) ? "b" : "c"

Другие языки

Код ниже

true ? "a" : false ? "b" : "c"

Является эквивалентным:

true ? "a" : (false ? "b" : "c")