Default в switch

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Тема урока — ветка default в операторе switch в PHP. Разберём, когда и зачем она срабатывает, где может располагаться, как влияет наличие break и как работает «проваливание» (fall-through). Начнём с простого синтаксиса и постепенно перейдём к кейсам с нестрогим сравнением, размещением default в начале, а также к задачам на сборку и анализ кода. В заданиях встретятся разные форматы: от заполнения пропусков и исправления ошибок до прогнозирования результата и сопоставления сценариев. По пути вы увидите, что default — необязателен, но полезен как «запасной вариант», что он может стоять в любом месте внутри switch и что отсутствие break после default приводит к выполнению следующих веток. Обращайте внимание на комментарии в коде: они задают контекст и цель. Так вы поймёте, почему выбор определённой строки или порядок важны.

Список тем

Заполни ветку default и завершай её break

id: 38941_task1

В блоке switch предусмотрены только один известный вариант и «запасной» путь. Добавьте метку ветки по умолчанию и корректно завершите её, чтобы при неизвестном статусе выводилось «UNKNOWN». Обратите внимание на точное двоеточие после ключевого слова и завершение инструкции.

Заполните пропуски
<?php
$status = 'archived'; // значение не совпадает ни с одним case
switch ($status) {
    case 'active':
        echo 'ACTIVE';
        break;
    input1S
        echo 'UNKNOWN';
        input2S
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Когда сработает default: код ответа HTTP

id: 38941_task2

Посмотрите на switch по числовому коду ответа. Выберите, что напечатает программа. Обратите внимание на перечисленные варианты case и наличие ветки default.

Выберите правильный вариант ответа
<?php
$code = 404;
switch ($code) {
    case 200:
        echo 'OK';
        break;
    case 301:
    case 302:
        echo 'REDIRECT';
        break;
    default:
        echo 'ERROR';
}
?>
Сообщения
Проверить
Показать подсказку

Исправьте синтаксис: default и пропущенную ;

id: 38941_task3

В коде есть две синтаксические ошибки: пропущена ; после break и неверно оформлена метка ветки по умолчанию. Исправьте строки так, чтобы при роли guest выводилось "guest".

Найдите ошибку и исправьте
<?php
$role = 'guest';
switch ($role) {
    case 'admin':
        echo 'admin';
        break
    default;
        echo 'guest';
        break;
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставьте сценарий и ветку выполнения

id: 38941_task4

Определите, какая ветка сработает в каждом из случаев. Учитывайте, что в PHP в switch используется нестрогое сравнение (==), поэтому "0" и 0 совпадают. Расположите правую колонку в соответствии с описанием слева.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Сработает ветка default
Сработает ветка case 0
Сработает ветка case '1'
Совпадёт case 1; default не используется
$x = 2; switch ($x) { case 1: echo 'one'; break; default: echo 'def'; }
$x = "0"; switch ($x) { case 0: echo 'zero'; break; default: echo 'def'; }
$x = '1'; switch ($x) { case '1': echo 'one'; break; default: echo 'def'; }
$x = 1; switch ($x) { case 1: echo 'one'; break; case 2: echo 'two'; }
Сообщения
Проверить
Показать подсказку

Добавьте ветку default как «запасной» путь

id: 38941_task5

Соберите фрагмент switch так, чтобы для неизвестной команды выводилось 'unknown'. Используйте элементы из банка: корректную метку ветки по умолчанию, строковый литерал и завершение ветки. В банке есть лишние элементы.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$cmd = 'pause'; // неизвестная команда
switch ($cmd) {
  case 'start':
    echo 'go';
    break;
  case 'stop':
    echo 'bye';
    break;
  input1S
    echo input2S;
    input3S
}
?>
default:
default ;
case default:
'unknown'
'go'
'bye'
break;
continue;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите switch, где default стоит первым

id: 38941_task6

Нужно собрать код, в котором default расположен первым, а команда 'noop' приводит к выводу 'UNKNOWN'. Используйте только корректные строки и расположите их в логичном порядке. В списке есть лишние строки-ловушки.

Перетяните в правильном порядке строки из одного блока в другой
<?php
$cmd = 'noop';
switch ($cmd) {
    default:
        echo 'UNKNOWN';
        break;
    case 'run':
        echo 'RUN';
        break;
}
default;
case default:
echo UNKNOWN;
continue;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Проваливание после default без break

id: 38941_task7

В этом примере default расположен между ветками и после него нет break. Учтите поведение switch: после входа в ветку выполнение продолжается до первого break, даже если последующие case-метки не соответствуют условию. Выберите, что будет выведено.

Выберите правильный вариант ответа
<?php
$val = 10;
switch (true) {
    case $val < 0:
        echo 'NEG';
        break;
    default:
        echo 'OTHER';
    case $val < 5:
        echo 'LT5';
        break;
}
?>
Сообщения
Проверить
Показать подсказку

Расставьте строки: корректный switch с default

id: 38941_task8

Восстановите правильный порядок строк для рабочего примера. Значение переменной 'blue' должно привести к выводу 'B', но ветка default тоже предусмотрена. Учитывайте, что default может располагаться в любом месте, но здесь он в конце.

Расставьте строки в правильном порядке
<?php
$color = 'blue';
switch ($color) {
case 'red': echo 'R'; break;
case 'blue': echo 'B'; break;
default: echo 'OTHER'; break;
}
?>
Сообщения
Проверить
Показать подсказку

Разнесите утверждения о default по категориям

id: 38941_task9

Определите, какие утверждения о ветке default верны, какие неверны, а какие не относятся к теме. Перетащите элементы в соответствующие категории.

Перетяните элементы в соответствующие блоки
Верно о default
Неверно о default
Прочее
Выполняется, если ни один case не совпал
В PHP default обязан быть последним
После default обычно ставят break
Можно объявить несколько default в одном switch
default может располагаться в любом месте внутри switch
default выполняется только при строгом сравнении
Без default код всё равно может работать
Оператор echo выводит строку
Цикл while повторяет блок кода
С default нельзя использовать break
Сообщения
Проверить
Показать подсказку

Что выведет код с default?

id: 38941_task10

Определите, что будет выведено при значении, которое не совпадает ни с одним из перечисленных case. Обратите внимание: значение приводится к верхнему регистру функцией, но строка заранее фиксирована.

Что должно получиться?
<?php
$action = 'export';
switch ($action) {
    case 'list':
        echo 'LIST';
        break;
    case 'view':
        echo 'VIEW';
        break;
    default:
        echo strtoupper('unknown');
}
?>
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру