Оператор switch является аналогом конструкции IF ELSEIF ELSE и позволяет выполнять различные действия в зависимости от значения.
В следующем коде можно увидеть, как одну и ту же задачу можно решить с помощью if и switch:
<?php
$status = 2; // Номер статуса заказа
if($status == 1)
echo 'Статус: Обрабатывается';
elseif($status == 2)
echo 'Статус: Передан в доставку';
elseif($status == 3)
echo 'Статус: Выполнен';
else
echo 'Статус: Неизвестен';
// Аналогичный код для switch
switch($status)
{
case 1:
echo 'Статус: Обрабатывается';
break;
case 2:
echo 'Статус: Передан в доставку';
break;
case 3:
echo 'Статус: Выполнен';
break;
default:
echo 'Статус: Неизвестен';
}
?>
Конструкция switch использует нестрогое сравнение ==.
В круглые скобки мы помещаем значение, которое будет сравниваться с остальными. Затем идёт case, сравниваемое значение и двоеточие. Затем идут команды, которые нужно выполнить. Блок default выполнится, если не выполнен ни один блок case.
Команда break прерывает текущее выполнение switch. Дело в том, что switch выполняет все команды подряд, даже если они находятся в разных блоках case:
<?php
$status = 1;
switch($status)
{
case 1:
echo 'Статус: Обрабатывается<br>';
case 2:
echo 'Статус: Передан в доставку<br>';
break;
case 3:
echo 'Статус: Выполнен<br>';
break;
}
?>
Результат в браузере:
Статус: Обрабатывается
Статус: Передан в доставку
В примере выше выполнились 2 блока case. 1-ый - потому что подходит по условию, второй - потому что в 1-ом блоке отсутствует break.
Несколько значений в CASE
Также в switch можно использовать один блок кода для нескольких значений:
<?php
$status = 2;
switch($status)
{
case 1:
case 2:
echo 'Ожидайте звонка менеджера';
break;
case 3:
case 4:
echo 'Заказ скоро будет доставлен';
}
?>
Обычно выбор между if и switch делается исходя только из предпочтений разработчика.
Лично я никогда не использую swtich просто потому что конструкции if-elseif-else мне нравятся больше.