Шаг 20.
Основы языка PHP.
Условные операторы. Оператор switch

    На этом шаге мы рассмотрим использование оператора 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). Например, в приведенных в этом разделе примерах, мы использовали строковые константы.

    На следующем шаге мы рассмотрим пример использования изученных конструкций.




Предыдущий шаг Содержание Следующий шаг