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")