Из-за чего непонятное поведение тернарного оператора в PHP?

Всем привет.
Недавно изучаю PHP (основной язык C#), непонятно поведение тернарного оператора.

Код на pastebin - pastebin.com/mW5H1r7H

Вывод
1. big if

a == false, b != 10

2. big if print_r

a == true, a != 5

3. short if

a == false, b != 10

4. short if print_r

a == false, b == 10


Вопрос - почему в тернарном операторе выполняется ветвь, которая не должна выполняться (short if print_r)?
  • Вопрос задан
  • 2795 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Тернарный оператор исполняется слева направо, то есть порядок расчёта будет следующий:
echo (print_r ($a) ? (($a == 5) ? 'a == 5' : 'a == true, a != 5') : ($b == 10)) ? 'a == false, b == 10' : 'a == false, b != 10';

Для изменения порядка используйте скобки:
echo print_r ($a) ? (($a == 5) ? 'a == 5' : 'a == true, a != 5') : (($b == 10) ? 'a == false, b == 10' : 'a == false, b != 10');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы