На этом шаге мы рассмотрим использование оператора 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 "Такой книги в наличии нет";
}
?>
Задание.
Выполните приведенную условную конструкцию, задавая переменной $book_name различные значения.
Исправлен ли в этом варианте существенный недостаток, найденный вами в предыдущем варианте этой программы?
Надо отметить, что присутствие в конструкции 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 "Такой книги в наличии нет";
}
?>
Задание.
Выполните приведенную условную конструкцию, задавая переменной $book_name различные значения, и
сравните результат с приведенным на рисунке 3.

Рис.3. Пример применения оператора switch
В этом случае, если пользователь задал название любой из трех книг Петрова, выведется его фамилия, так как оператор break располагается только после названия последней книги этого автора.
В заключение отметим, что значение, следующие за case, в отличие от многих других языков программирования, может быть логическим выражением (тип Boolean), целым числом (Integer), вещественным числом (Double) или строкой (String). Например, в приведенных в этом разделе примерах, мы использовали строковые константы.
На следующем шаге мы рассмотрим пример использования изученных конструкций.