На этом шаге мы рассмотрим использование оператора switch.
В общем случае эта конструкция выглядит так:
Рис.1. Общий вид оператора switch
Вся конструкция начинается со слова switch. Далее в круглых скобках следует выражение, которое, в отличие от выражения в операторе if, может быть не только логическим выражением (типа Boolean), но и целым числом (Integer), вещественным числом (Double) и строкой (String). От значения этого выражения зависит, какую группу операторов необходимо выполнить.
Затем следует блок, в котором находятся значения для сравнения и соответствующие им действия. Синтаксически это оформляется с помощью специального слова case и знака двоеточия.
Оператор break служит для того, чтобы выйти из конструкции switch в случае, когда значения выражения и указанной после служебного слова case константы, совпали.
После слова default следует действие, которое нужно выполнить, если ни одно из предыдущих действий не выполнилось, то есть не было совпадений ни с одним из значений.
Вернемся к примеру из предыдущего шага. Перепишем его, используя оператор switch.
<?php $book_name = "Самоучитель по PHP"; switch ($book_name) { // выводится, если $book_name = "Самоучитель по Perl" case "Самоучитель по Perl": echo "Автор: Петров"; // выход из конструкции switch break; case "Самоучитель по ASP": echo "Автор: Иванов"; break; case "Самоучитель по PHP": echo "Автор: Сидоров"; break; // сообщение выведется, если не было совпадений default: echo "Такой книги в наличии нет"; } ?>
Надо отметить, что присутствие в конструкции switch слов default и break не является обязательным. Если опустить слово default, то в случае, когда совпадений не было, никаких действий просто не выполняется. Интереснее дело обстоит с оператором break. Давайте уберем этот оператор из приведенного примера. Текст программы будет выглядеть в этом случае так:
<?php $book_name = "Самоучитель по Perl"; switch ($book_name) { case "Самоучитель по Perl": echo "Автор: Петров"."<br>"; case "Самоучитель по ASP": echo "Автор: Иванов"."<br>"; break; case "Самоучитель по PHP": echo "Автор: Сидоров"."<br>"; break; default: echo "Такой книги в наличии нет"."<br>"; } ?>
Выполним ее. Сравните полученный вами результат с результатом, приведенный на рисунке 2.
Рис.2. Пример применения оператора switch
Прокомментируем полученный результат. Если совпали значение выражения с указанной после case константой и опущен оператор break, то после выполнения операторов, "помеченных" найденной константой, не произойдет выхода из оператора switch, а будут выполняться по порядку следующие операторы до тех пор, пока не будет найден оператор break.
Данная особенность в нашем случае привела к неправильной работе программы. Но в некоторых случаях это может оказаться полезным.
Изменим немного нашу программу. Пусть, например, Петров написал несколько книг. В этом случае задачу можно решить так, как показано на примере.
<?php $book_name = "Информатика в школе"; switch ($book_name) { case "Самоучитель по Perl": case "Информатика в школе": case "Программирование в Internet": echo "Автор: Петров"; break; case "Самоучитель по ASP": echo "Автор: Иванов"; break; case "Самоучитель по PHP": echo "Автор: Сидоров"; break; default: echo "Такой книги в наличии нет"; } ?>
Рис.3. Пример применения оператора switch
В этом случае, если пользователь задал название любой из трех книг Петрова, выведется его фамилия, так как оператор break располагается только после названия последней книги этого автора.
В заключение отметим, что значение, следующие за case, в отличие от многих других языков программирования, может быть логическим выражением (тип Boolean), целым числом (Integer), вещественным числом (Double) или строкой (String). Например, в приведенных в этом разделе примерах, мы использовали строковые константы.
На следующем шаге мы рассмотрим пример использования изученных конструкций.