PHP-оценка тернарного (или условного) оператора немного отличается от оценки других языков.
1+1==2 ? 2 : 1+2==2 ? 3 : 2
Большинство языков (например, JavaScript) оценили бы это как:
(1+1==2) ? (2) : ( (1+2==2) ? (3) : (2) )
=> 2
PHP, однако, оценивает это как:
( (1+1==2) ? (2) : (1+2==2) ) ? (3) : (2)
=> 3
Поэтому, поскольку (1+1==2) оценивает значение true, результат первого тернарного выражения оценивается как 2, и этот результат затем передается во второе тернарное выражение, которое оценивается как 3.
Из-за неудачной ошибки в языковой грамматике реализация?: в PHP используется некорректная ассоциативность по сравнению с другими языками & hellip;
Причина в том, что вложение двух условных операторов приводит к возникновению негабаритного состояния с двумя последними параметрами в виде его ветвей: c1 ? o1 : c2 ? o2 : o3 действительно ((c1 ? o1 : c2) ? o2 : o3). Это признано и, вероятно, не изменится.