3.2. Оператор
Язык PHP имеет сокращенную версию оператора if, который был позаимствован из C. В нем в качестве троичного оператора используется знак вопроса (рис. 3.2).
conditional expression ? true expression : false expression;

Условное выражение оценивается с точки зрения его значения: дает оно значение TRUE или FALSE. При значении TRUE выполняется выражение, заключенное между знаком вопроса и двоеточием, в противном случае выполняется выражение, указанное после двоеточия. Нижеприведенный фрагмент программного кода
($clientQueue > 0) ? serveClients() : cleanUp(); работает как оператор
if($clientQueue > 0) serveClients();
else
cleanUp();
Но это подобие обманчиво. Несмотря на то что сокращенная форма кажется эквивалентом использования конструкции if-else, при более детальном рассмотрении это оказывается не так. Как было сказано, оператор ? является цельным оператором, а не составной конструкцией. А это значит, что выражение всегда обрабатывается целиком и значение соответствующего выражения подставляется вместо выражения ?. Другими словами, что-то похожее на
print(true ? "это истинно" : "это ложно"); является допустимым оператором. Так как условное выражение истинно, получаем эквивалентную строку:
printC^^ истинно"); что нельзя сделать с помощью оператора if.
Оператор ? можно отнести к плохочитаемым, и он не является крайне необходимым. И вполне возможно, что вы им никогда так и не воспользуетесь. Однако этот оператор позволяет создавать достаточно компактный программный код.
3.3. Оператор switch
Альтернативой структурам if-elseif-else является оператор switch, работающий с допущением, что производится сравнение одного выражения и множества возможных значений. На рис. 3.3 продемонстрирована структура оператора switch.
Операторы управления
В операторе switch сначала задается основное выражение, а затем с помощью операторов case последовательно сравнивается его значение с возможными вариантами значений. В конце списка вариантов необходимо разместить оператор default, который работает точно так же, как оператор else, т.е. он отрабатывает, если не найдены подходящие варианты.
Обратите внимание, что операторы case не ограничиваются фигурными скобками. Это подчеркивает одно существенное различие между операторами if и switch. После обработки блока if управление передается в конец всего оператора if. В листинге 3.3, если текущий день является вторником (Tuesday), переменной deutsch_Day присваивается значение Deinstag и управление передается вниз за фигурную скобку, закрывающую блок else.
Оператор case служит стартовой точкой выполнения алгоритма. Основное выражение сравнивается с каждым выражением case до тех пор, пока не будет обнаружено совпадение. Программный код, содержащийся в этом операторе, выполняется. Оператор case, не соответствующий основному выражению, игнорируется. Иногда в этом есть смысл, но чаще всего для прекращения выполнения оператора switch используется оператор break.
Посмотрим на листинг 3.4 - здесь листинг 3.3 переписан с применением оператора switch. Самым лучшим аргументом в пользу использования оператора switch является то, что он проще и понятнее. Так как PHP позволяет сравнивать строки, оператор switch эффективнее, чем в других языках. Если у вас есть определенный опыт программирования на языке Basic, то может возникнуть естественный вопрос: "А существует ли возможность для оператора switch в PHP работать с диапазонами?" Нет, такой возможности в PHP еще не предусмотрено. Вероятно, что такую ситуацию лучше обрабатывать с помощью оператора if-elseif-else.
Операторы управления
Операторы управления