Полный цикл в digital

Конструкции switch

Конструкция switch..case является альтернативой использованию конструкции if..elseif..else. Оператор switch получает некоторое выражение и сравнивает его с набором значений:

<?
switch (выражение){
case значение1: действия; break;
case значение2: действия; break;
//...........................
case значениеN: действия; break;
}

После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после операторов сase. И если совпадение будет найдено, то будет выполняться определенный блок сase.

Конструкция switch может содержать произвольное количество операторов case. В конце блока сase ставится оператор break, чтобы избежать выполнения других блоков.

Весь блок switch помещается в фигурные скобкиб однако блок каждого отдельного оператора case НЕ помещается в фигурные скобки.

Например, возьмем следующую конструкцию if..elseif..else:

<?
$a = 3;
if($a==1) echo "сложение";
elseif($a==2) echo "вычитание";
elseif($a==3) echo "умножение";
elseif($a==4) echo "деление";

Теперь перепишем ее с помощь конструкции switch..case:

<?
$a = 3;
switch($a)
{
case 1:
echo "сложение";
break;
case 2:
echo "вычитание";
break;
case 3:
echo "умножение";
break;
case 4:
echo "деление";
break;
}

То есть на вход в конструкцию switch передается переменная $a, и ее значение последовательно сравнивается со значениями, указанными после операторов case. Так, в данном случае переменная $a равна 3, поэтому выполнение дойдет до блока:

<?
case 3:
echo "умножение";
break;

и этот блок и будет выполняться.

Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default:

<?
$a = 3;
switch($a)
{
case 1:
echo "сложение";
break;
case 2:
echo "вычитание";
break;
default:
echo "действие по умолчанию";
break;
}

Конструкция switch..case также поддерживает альтернативный синтаксис, при котором вместо открывающей блок фигурной скобки ставится двоеточие, а вместо закрывающей фигурной скобки - ключевое слово endswitch:

<?
$a = 3;
switch($a):
case 1:
echo "сложение";
break;
case 2:
echo "вычитание";
break;
default:
echo "действие по умолчанию";
break;
endswitch

Сравнение значений и типов

Стоит отметить важное отличие конструкции switch от match: switch сравнивает только значение, но не учитывает тип выражения. Тогда как match также учитывает тип сравниваемого выражения. Рассмотрим разницу на примере. Пусть есть следующая конструкция switch:

<?
switch (8.0) {
case "8.0":
$result = "строка";
break;
case 8.0:
$result = "число";
break;
}
echo $result; // строка

В конструкцию switch передается в качестве выажения число 8.0, но с точки зрения внутренней логики конструкции switch это выражение также соответствует строке "8.0". Поэтому в данном случае будет выполняться блок:

case "8.0":
$result = "строка";
break;

Теперь посмотрим, что будет в аналогичном примере с match:

match (8.0) {
"8.0" => $result = "строка",
8.0 => $result = "число"
};
echo $result; // число

Конструкция match также будет учитывать тип выражения, а тип в данном случае float, поэтому будет выполняься блок:

8.0 => $result = "число"
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг