PHP Учебник

PHP Старт Введение в PHP Установка PHP Синтаксис PHP Комментарии в PHP Переменные PHP PHP Echo / Print Типы данных PHP Строки PHP Числа PHP Математика в PHP Константы PHP Операторы PHP PHP If...Else...Elseif PHP Switch Циклы в PHP Функции PHP Массивы PHP PHP Суперглобальные PHP RegEx

PHP Формы

Обработка форм PHP Валидация форм PHP Обязательные поля Валидация URL/E-mail Полная форма PHP

PHP Продвинутый

PHP Дата и время PHP Include/Require PHP Работа с файлами Открытие/Чтение файлов Создание/Запись файлов PHP Загрузка файлов Файлы cookie PHP Сессии PHP Фильтры PHP Расширенные фильтры PHP Функция Callback PHP JSON PHP Исключения

PHP OOP

Что такое ООП в PHP Классы/Объекты PHP Цепочки методов PHP Конструктор PHP Деструктор PHP Модификаторы доступа Наследование в PHP Константы класса PHP Подсказка типов PHP Подсказка интерфейсов Абстрактные классы PHP PHP Интерфейсы PHP Полиформизм PHP Трейты Статические методы PHP Статические свойства PHP Пространства имен PHP Итерируемые объекты

База данных MySQL

База данных MySQL Подключение к MySQL Создание БД MySQL Создание таблицы MySQL Вставка данных MySQL Получить ID MySQL Подготовленные операторы PHP MySQL Получение данных MySQL Предложение WHERE Предложение ORDER BY Обновление данных MySQL Удаление данных БД MySQL Limit Data

PHP XML

Парсеры PHP XML Парсер PHP SimpleXML Получить PHP SimpleXML PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Введение AJAX PHP AJAX База Данных AJAX XML AJAX Живой поиск AJAX Опрос

PHP Примеры

PHP Примеры Практика ООП PHP PHP квиз-тест Упражнения Базовый PHP Упражнения Алгоритмы Упражнения Массивы Упражнения Цикл for Упражнения Функции Регулярные выражения Упражнения Дата PHP Упражнения Строки PHP Математика PHP Упражнения Формы PHP Упражнения Классы PHP Упражнения JSON PHP PHP Задачник


Оператор switch в PHP




Оператор switch аналогичен серии операторов if с одинаковым условием. Часто возникает необходимость сравнивать одну и ту же переменную или выражение с массой различных значений, и выполнять разные сценарии в зависимости от того, какое значение принимает эта переменная или выражение. Это именно та ситуация, для которой удобен оператор switch.


Используйте оператор switch, чтобы выбрать один из множества блоков кода для выполнения.

Синтаксис

switch(n){
    case label1:
        // код для выполнения, если n=label1
        break;
    case label2:
        // код для выполнения, если n=label2
        break;
    ...
    default:
        // код, выполняемый, если n отличается от всех меток labels
}

Вот как работает оператор switch: берется исходное выражение n (чаще всего переменная), которое вычисляется один раз. Затем значение выражения сравнивается со всеми значениями, стоящими рядом с ключевым словом case (метка), в порядке их следования. Если есть совпадение, выполняется блок кода, связанный с этим случаем. Используйте break для предотвращения автоматического перехода кода к следующей метке. Оператор default используется, если совпадение не найдено.

<?php
$i = "яблоко";

switch ($i) {
  case "яблоко":
    echo "i это яблоко";
    break;
  case "груша":
    echo "i это груша";
    break;
  case "слива":
    echo "i это слива";
    break;
  default:
    echo "i это не яблоко, не груша и не слива";
}
?>

Результат выполнения кода:

i это яблоко

Примечание: Обратите внимание, что за ключевым словом case каждый раз следует значение (литерал), после которого должно обязательно стоять двоеточие.

Инструкции, расположенные после case, будут исполняться до тех пор, пока не встретится оператор break.

Интерпретатор PHP, встретив ключевое слово break, завершает работу оператора switch и переходит к исполнению инструкции, расположенной после закрывающей фигурной скобки оператора switch.

Если вы не напишете оператор break, оператор switch начнёт выполнение блока кода с case метки, значение которой соответствует значению условного выражения, и продолжит выполнение инструкций до тех пор, пока не дойдет до конца всего блока. В следующем примере показано, что происходит при отсутствии ключевого слова break:

<?php
$i = 0;

switch ($i) {
  case 0:
    echo "i равно 0";
  case 1:
    echo "i равно 1";
  case "2":
    echo "i равно 2";
  default:
    echo "i это не 0, не 1 и не 2";
}
?>

Примечание: В операторе case может быть использовано любое выражение, которое приводится к простому типу, то есть к строке (string), числу (integer), вещественному числу (float) или логическому значению (bool). Массивы или объекты не используются.

Оператор continue применяется в конструкциях switch и действует подобно оператору break:

<?php
$a1 = 2;

switch ($a1) {
 case 1:
 case 2:
 case 3:
   echo "\$a1 равно 1, 2 или 3"; //выведет $a1 равно 1, 2 или 3
   continue;
 case 6:
   echo "\$a1 равно 6";
   continue;
}
?>

Результат выполнения кода:

$a1 равно 1, 2 или 3

Из примера выше видно, что список операторов для исполнения в секции case также может быть пустым, что просто передает управление списку операторов в следующей секции case.

Примечание: Заметьте, что конструкция swich/case использует неточное сравнение (==).

Проверь себя с помощью упражнений

Задача:

Создайте оператор switch, который будет выводить "Доброе утро!", если $x == "утро", и "Добрый вечер!", если $x == "вечер".

 ($x) {
   "утро":
    echo "Доброе утро!";
    break;
   "вечер":
    echo "Добрый вечер!";
    break;
}