Конструкции выбора в php

Конструкции выбора в PHP

Приведем примеры использования конструкции switch-case:

$ x = 1 ;
// Используем if-else
if ($ x == 0 ) <
echo «x=0
» ;
> elseif ($ x == 1 ) <
echo «x=1
» ;
> elseif ($ x == 2 ) <
echo «x=2
» ;
>
// Используем switch-case
switch ($ x ) <
case 0 :
echo «x=0
» ;
break;
case 1 :
echo «x=1
» ;
break;
case 2 :
echo «x=2
» ;
break;
>
?>

Рассмотренный сценарий выводит x=1 дважды . Об этом говорит сайт https://intellect.icu . Еще пример использования конструкции switch-case:

$ x = «Яблоко» ;
switch ($ x ) <
case «Яблоко» :
echo «Это Яблоко» ;
break;
case «Груша» :
echo «Это Груша» ;
break;
case «Арбуз» :
echo «Это Арбуз» ;
break;
>
?>

Данный скрипт выводит «Это Яблоко».

Конструкция switch выполняется поэтапно. Сперва никакой код не исполнен. Только, когда конструкция case найдена со значением, которое соответствует значению выражения switch, PHP начинает исполнять конструкции. PHP продолжает исполнять конструкции до конца блока switch, пока не встречается оператор break. Если не использовать конструкции (операторы) break, скрипт будет выглядеть так:

$ x = 0 ;
switch ($ x ) <
case 0 :
echo «x=0
» ;
case 1 :
echo «x=1
» ;
case 2 :
echo «x=2
» ;
>
// Без использования break выводит
// x=0
// x=1
// x=2
?>

Операторный список для case может быть также пуст, он просто передает управление в операторный список до следующей конструкции case:

switch ($x) case 0:
case 1:
case 2:
echo «x меньше, чем 3, но не отрицателен»;
break;
case 3:
echo «x=3»;
>
?>

Когда ни одно значение из набора не совпало со значением выражения, тогда выполняется блок default, если он указан, например:

$ x = 3 ;
switch ($ x ) <
case 0 :
echo «x=0» ;
break;
case 1 :
echo «x=1» ;
break;
case 2 :
echo «x=2» ;
break;
default:
echo «x не равен 0, 1 или 2» ;
>
?>

Данный скрипт выводит «x не равен 0, 1 или 2», поскольку переменная $x=3.

Конструкция switch-case также имеет альтернативный синтаксис:

switch(выражение):
case значение1: команды1; [break;]. . .
case значениеN: командыN; [break;][default: команды_по_умолчанию; [break]]endswitch;

Практический пример использования альтернативного синтаксиса для конструкции switch-case:

$ x = 3 ;
switch ($ x ):
case 0 :
echo «x=0» ;
break;
case 1 :
echo «x=1» ;
break;
case 2 :
echo «x=2» ;
break;
default:
echo «x не равен 0, 1 или 2» ;
endswitch;
?>

Как вы уже поняли, данный скрипт выводит «x не равен 0, 1 или 2», так как $x=3.

К сожалению, в одной статье не просто дать все знания про конструкции выбора в php. Но я — старался. Если ты проявишь интерес к раскрытию подробностей,я обязательно напишу продолжение! Надеюсь, что теперь ты понял что такое конструкции выбора в php и для чего все это нужно, а если не понял, или есть замечания, то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Из статьи мы узнали кратко, но емко про конструкции выбора в php

Источник

Конструкции выбора в php

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

Читайте также:  Загрузка файлов на ftp java

После ключевого слова 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 :

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

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

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

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

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

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

match

Начиная с версии 8.0 в PHP была добавлена поддержка другой, похожей конструкции — match . Она позволяет оптимизировать конструкцию switch . Конструкция match также принимает некоторое выражение и сравнивает его с набором значений.

Например, пусть у нас есть следующий код:

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

Перепишем этот пример с использованием match :

$a = 2; $operation = match($a) < 1 =>"сложение", 2 => "вычитание", default => "действие по умолчанию", >; echo $operation;

Итак, match в скобках также принимает некоторое сравниваемое выражение (в данном случае это переменная $a). Сам блок кода match также обертывается в фигурные скобки, однако в конце после закрывающей фигурной скобки необходимо поставить точку с запятой. А вместо операторов case просто указываются значения, с которыми сравнивается выражение.

Но в отличие от switch , конструкция match возвращает некоторый результат. Поэтому после каждого сравнимого значения ставится оператор => , после которого идет возвращаемый результат.

То есть в данном случае переменная $a равна 2, поэтому в конструкции match будет выполнять блок

Этот блок установит в качестве возвращаемого результата строку «вычитание» .

Поскольку конструкция match возвращает результат, то этот результат мы можем присвоить другой переменной:

В итоге в переменной $operation будет храниться строка «вычитание» .

Также мы можем переписать предыдущий пример следующим образом:

$a = 2; match($a) < 1 =>$operation = "сложение", 2 => $operation = "вычитание", default => $operation = "действие по умолчанию", >; echo $operation;

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

Стоит отметить важное отличие конструкции 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, поэтому будет выполняься блок:

Читайте также:  Самый популярный фреймворк питон

Источник

Конструкции выбора в php

Оператор switch похож на ряд операторов IF с одинаковым условием. Во многих случаях вам может понадобиться сравнивать одну и ту же переменную (или выражение) с множеством различных значений и выполнять различные участки кода в зависимости от того, какое значение принимает эта переменная (или выражение). Это именно тот случай, для которого удобен оператор switch .

Замечание: Обратите внимание, что в отличие от некоторых других языков, оператор continue применяется в конструкциях switch и действует подобно оператору break . Если у вас конструкция switch находится внутри цикла, и вам необходимо перейти к следующей итерации цикла, используйте continue 2 .

Замечание:

Заметьте, что конструкция switch/case использует нестрогое сравнение (==).

В следующем примере каждый блок кода эквивалентен. В одном используется серия операторов if и elseif , а в другом — оператор switch . В каждом случае результат один и тот же.

Пример #1 Оператор switch

switch ( $i ) case 0 :
echo «i равно 0» ;
break;
case 1 :
echo «i равно 1» ;
break;
case 2 :
echo «i равно 2» ;
break;
>

if ( $i == 0 ) echo «i равно 0» ;
> elseif ( $i == 1 ) echo «i равно 1» ;
> elseif ( $i == 2 ) echo «i равно 2» ;
>
?>

Пример #2 Оператор switch допускает сравнение с типом string

switch ( $i ) case «яблоко» :
echo «i это яблоко» ;
break;
case «шоколадка» :
echo «i это шоколадка» ;
break;
case «пирог» :
echo «i это пирог» ;
break;
>
?>

Важно понять, как оператор switch выполняется, чтобы избежать ошибок. Оператор switch исполняет строчка за строчкой (на самом деле выражение за выражением). В начале никакой код не исполняется. Только в случае нахождения оператора case , значение которого совпадает со значением выражения в операторе switch , PHP начинает исполнять операторы. PHP продолжает исполнять операторы до конца блока switch либо до тех пор, пока не встретит оператор break . Если вы не напишете оператор break в конце секции case, PHP будет продолжать исполнять команды следующей секции case. Например :

switch ( $i ) case 0 :
echo «i равно 0» ;
case 1 :
echo «i равно 1» ;
case 2 :
echo «i равно 2» ;
>
?>

В этом примере, если $i равно 0, то PHP исполнит все операторы echo! Если $i равно 1, PHP исполнит два последних оператора echo. Вы получите ожидаемое поведение оператора (‘i равно 2’ будет отображено) только, если $i будет равно 2. Таким образом, важно не забывать об операторах break (даже если вы, возможно, хотите избежать его использования по назначению при определённых обстоятельствах).

Читайте также:  Style display none in html div

В операторе switch выражение вычисляется один раз и этот результат сравнивается с каждым оператором case . В выражении elseif , выражение вычисляется снова. Если ваше условие более сложное, чем простое сравнение и/или находится в цикле, конструкция switch может работать быстрее.

Список операторов для исполнения в секции case также может быть пустым, что просто передаёт управление списку операторов в следующей секции case.

switch ( $i ) case 0 :
case 1 :
case 2 :
echo «i меньше чем 3, но неотрицательный» ;
break;
case 3 :
echo «i равно 3» ;
>
?>

Специальный вид конструкции case — default . Сюда управление попадает тогда, когда не сработал ни один из других операторов case. Например:

switch ( $i ) case 0 :
echo «i равно 0» ;
break;
case 1 :
echo «i равно 1» ;
break;
case 2 :
echo «i равно 2» ;
break;
default:
echo «i не равно 0, 1 или 2» ;
>
?>

Замечание: Несколько указаний default вызовут ошибку E_COMPILE_ERROR .

Замечание: Формально конструкция default может быть перечислена в любом месте. Она будет использоваться только в том случае, если ни один другой вариант не подходит. Однако, по соглашению, лучше всего поместить её в конец, как последнюю конструкцию.

Если ни одна конструкция case не совпадает и нет конструкции default , то код не будет выполнен, как если бы ни одно утверждение if не было истинным.

Значение case может быть задано в виде выражения. Однако это выражение будет оценено само по себе, а затем слабо сопоставлено со значением switch. Это означает, что его нельзя использовать для сложных оценок значения switch. Например:

switch ( $target ) case $start — 1 :
print «A» ;
break;
case $start — 2 :
print «B» ;
break;
case $start — 3 :
print «C» ;
break;
case $start — 4 :
print «D» ;
break;
>

Для более сложных сравнений в качестве значения switch может использоваться значение true . Или, как вариант, вместо switch использовать блоки if — else .

switch ( true ) case $start — $offset === 1 :
print «A» ;
break;
case $start — $offset === 2 :
print «B» ;
break;
case $start — $offset === 3 :
print «C» ;
break;
case $start — $offset === 4 :
print «D» ;
break;
>

Возможен альтернативный синтаксис для управляющей структуры switch. Для более детальной информации, смотрите Альтернативный синтаксис для управляющих структур.

switch ( $i ):
case 0 :
echo «i равно 0» ;
break;
case 1 :
echo «i равно 1» ;
break;
case 2 :
echo «i равно 2» ;
break;
default:
echo «i не равно 0, 1 или 2» ;
endswitch;
?>

Возможно использование точки с запятой вместо двоеточия после оператора case. К примеру :

switch( $beer )
case ‘tuborg’ ;
case ‘carlsberg’ ;
case ‘stella’ ;
case ‘heineken’ ;
echo ‘Хороший выбор’ ;
break;
default;
echo ‘Пожалуйста, сделайте новый выбор. ‘ ;
break;
>
?>

Источник

Оцените статью