Из-за чего непонятное поведение тернарного оператора в 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');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
от 300 000 до 500 000 ₽
06 мая 2024, в 10:02
3000 руб./за проект
06 мая 2024, в 09:38
1200 руб./в час
06 мая 2024, в 09:37
1200 руб./в час