Когда нужно сравнить одну переменную с множеством разных значений, цепочка `if-elseif-else` может стать громоздкой. Здесь на помощь приходит конструкция `switch-case`. Она работает как многопозиционный переключатель: мы подаем на вход переменную (`switch`), а затем проверяем ее значение в каждом отдельном случае (`case`). Это делает код более читаемым и структурированным. Важными элементами `switch` являются `break`, который прерывает выполнение после найденного совпадения, и `default` — блок, который выполняется, если ни одно из значений `case` не подошло. В этом тренажере мы отработаем синтаксис `switch-case`, научимся находить и исправлять ошибки (особенно связанные с отсутствием `break`), предсказывать результат выполнения и собирать целые конструкции.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Базовая структура switch-case
Заполните пропуски, чтобы создать простую конструкцию `switch-case`. Код должен определять название дня недели по его номеру. Вам нужно вставить ключевые слова `switch`, `case` и `break`.
$day_number = 1;
$day_name = "";
input1S ($day_number) {
input2S 1:
$day_name = "Понедельник";
input3S;
case 2:
$day_name = "Вторник";
break;
}
echo $day_name;Найдите пропущенный `break`
В этом коде есть логическая ошибка: в одном из блоков `case` пропущен оператор `break`. Из-за этого после нахождения совпадения выполнение "провалится" в следующий `case`. Найдите, где не хватает `break`, и добавьте его.
$command = "start"; switch ($command) { case 'start': echo "Процесс запущен"; case 'stop': echo "Процесс остановлен"; break;}Что выведет код с блоком `default`?
Проанализируйте код. Переменная `$http_status` имеет значение 404. Конструкция `switch` пытается найти совпадение. Если ни один из `case` не подходит, выполняется блок `default`. Выберите правильный вариант вывода.
$http_status = 404;
$message = "";
switch ($http_status) {
case 200:
$message = "OK";
break;
case 301:
$message = "Moved Permanently";
break;
default:
$message = "Not Found";
}
echo $message;Соберите обработчик команд
Соберите из фрагментов кода полноценную конструкцию `switch-case`, которая обрабатывает команды `'view'`, `'edit'` и `'delete'`. Для любой другой команды должно выводиться сообщение "Неизвестная команда". Некоторые фрагменты лишние.
$command = 'edit';switch ($command) { case 'view': echo 'Просмотр...'; break; case 'edit': echo 'Редактирование...'; break; case 'delete': echo 'Удаление...'; break; default: echo 'Неизвестная команда';}if ($command == 'edit')breakРезультат "проваливания"
В этом коде намеренно пропущены операторы `break`. Это означает, что после нахождения первого совпадения, выполнение продолжится и в следующих блоках `case` до тех пор, пока не встретится `break` или конец `switch`. Что выведет этот код? Ответ запишите в одну строку.
$level = 2;
switch ($level) {
case 1:
echo "Уровень 1. ";
case 2:
echo "Уровень 2. ";
case 3:
echo "Уровень 3. ";
break;
default:
echo "Начальный уровень. ";
}Группировка `case` из банка
Конструкция `switch` позволяет группировать несколько `case` для выполнения одного и того же кода. Заполните пропуски, используя токены из банка, чтобы код правильно определял выходные дни.
$day = "Sunday";
switch ($day) {
case "Saturday":
input1S "Sunday":
echo "Это выходной!";
break;
input2S:
echo "Это будний день.";
}Исправьте синтаксис `case`
Программист допустил ошибку в синтаксисе `case`, поставив точку с запятой вместо двоеточия. Это приводит к синтаксической ошибке. Найдите и исправьте все строки с этой ошибкой.
$grade_letter = 'B'; switch ($grade_letter) { case 'A'; echo "Отлично"; break; case 'B'; echo "Хорошо"; break; default: echo "Удовлетворительно";}