Оператор switch-case является альтернативой оператору if-elseif-else, который делает почти то же самое. Оператор switch-case проверяет переменную на соответствие серии значений, пока не найдет совпадение, а затем выполняет блок кода, соответствующий этому совпадению.
switch(n) {
case label1:
// Код для выполнения, если n=label1
break;
case label2:
// Код для выполнения, если n=label2
break;
...
default:
// Код для выполнения, если n отличается от всех меток
}
Рассмотрим следующий пример, в котором для каждого дня отображаются разные сообщения.
<?php
$today = date("D");
switch($today) {
case "Mon":
echo "Сегодня понедельник. Нужно убрать в своем доме.";
break;
case "Tue":
echo "Сегодня вторник. Нужно купить немного еды.";
break;
case "Wed":
echo "Сегодня среда. Нужно посетите врача.";
break;
case "Thu":
echo "Сегодня четверг. Нужно отремонтировать свою машину.";
break;
case "Fri":
echo "Сегодня пятница. У нас запланирована вечеринка.";
break;
case "Sat":
echo "Сегодня суббота. Время кино.";
break;
case "Sun":
echo "Сегодня воскресенье. Пора немного отдохнуть.";
break;
default:
echo "Нет информации на этот день.";
break;
}
?>
У switch-case
есть одно важное отличие от оператора if-elseif-else
. Оператор switch
выполняется строка за строкой (т.е. оператор за оператором), и как только PHP находит оператор case
, который оценивается как истинный, он не только выполняет код, соответствующий этому оператору case
, но также выполняет все последующие операторы case
до конца.
Чтобы предотвратить это, нужно добавить оператор break
в конец каждого блока case
. Оператор break
сообщает PHP выйти из блока операторов switch-case
после выполнения кода, связанного с первым истинным случаем.