В PHP есть специальная конструкция switch-case
,
которая используется для выбора одного значения
из некоторого ряда значений. Изучите ее синтаксис:
<?php
switch (переменная) {
case 'значение1':
/*
здесь код, который выполнится в случае,
если переменная имеет значение1
*/
break;
case 'значение2':
/*
здесь код, который выполнится в случае,
если переменная имеет значение2
*/
break;
case 'значение3':
/*
здесь код, который выполнится в случае,
если переменная имеет значение3
*/
break;
default:
/*
здесь код, который выполнится в случае,
если не совпала ни с одним значением
*/
break;
}
?>
Как вы можете заметить, switch-case
представляет собой альтернативу множеству
elseif
. Давайте посмотрим на примере.
Пусть у нас есть вот такой код:
<?php
$lang = 'ru';
if ($lang === 'ru') {
echo 'рус';
} elseif ($lang === 'en') {
echo 'анг';
} elseif ($lang === 'de') {
echo 'нем';
} else {
echo 'язык не поддерживается';
}
?>
Перепишем этот код через конструкцию switch-case
:
<?php
$lang = 'ru';
switch ($lang) {
case 'ru':
echo 'рус';
break;
case 'en':
echo 'англ';
break;
case 'de':
echo 'нем';
break;
default:
echo 'язык не поддерживается';
break;
}
?>
Переменная $num
может принимать значения
1
, 2
, 3
или 4
.
Определите, в какую пору года попадает значение
этой переменной.
Необязательность default
Блок default
является необязательным.
Давайте его уберем из предыдущего кода:
<?php
$lang = 'ru';
switch ($lang) {
case 'ru':
echo 'рус';
break;
case 'en':
echo 'англ';
break;
case 'de':
echo 'нем';
break;
}
?>
Необязательность break
Команда break
является необязательной.
Без нее, однако, поведение блоков case
будет неожиданным. Давайте посмотрим на примере.
Пусть у нас есть вот такой код:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Уберем в нем все break
, а в переменную
$num
для начала запишем число 3
.
Пока все будет работать так, как и работало:
<?php
$num = 3; // пусть здесь число 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// После запуска код выведет 3 - все хорошо
?>
Давайте теперь в переменную $num
запишем
число 2
. В этом случае у нас ожидаемо
выполнится case 2
, а затем неожиданно
еще и case 3
:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// После запуска код выведет 2, а затем 3
?>
Если же в переменную $num
записать
число 1
, то вообще выполнятся все
конструкции case
:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// После запуска код выведет 1, затем 2, а затем 3
?>
То есть получается, что при отсутствии break
после выполнения задуманного case
,
выполнятся и все case
ниже него. Иногда
такую особенность используют, при решении задач.
В следующем примере, если переменная $num
имеет значение 1
или 2
, то
в переменную $result
запишется 'a'
.
Если же переменная $num
имеет значение
3
, то в переменную $result
запишется 'b'
:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$result = 'a';
break;
case 3:
$result = 'b';
break;
}
echo $result;
?>
Выше я написал, что иногда такую особенность используют, но я, в общем-то, не рекомендую ей пользоваться, так как код становится не очень очевидным.
Очевиднее решить такую задачу через ифы:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$result = 'a';
}
if ($num == 3) {
$result = 'b';
}
echo $result;
?>