Условие и выбор - ключевые конструкции языка. Правильное принятие решений - основа качественного алгоритма и понятный, доступный для понимания код. Корректное оформление алгоритма и правильное использование комментариев относятся к факторам стабильности и надежности.

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

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

Конструкция выбора switch case PHP очень просто записывается, корректно исполняется и удобна на практике. В примере предложена функция, которая оформляет текст тегами HTML. Если первый параметр содержит "bold" или "italic", то результат функции оборачивает второй параметр тегами "strong" или "i".

Результат в браузере отображает содержание второго параметра жирным или наклонным начертанием. Любое другое значение первого параметра интерпретируется как цвет и оборачивает второй параметр тегом "font".

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

В предложенном примере применение оператора "break" избыточно, поскольку в результате исполнения любого условия произойдет выход из функции по оператору "return".

Описание конструкции PHP: switch case

Условие, которое проверяется, записывается в круглых скобках после ключевого слова "switch". Тело конструкции состоит из секций "case" и одного блока операторов "default", который исполняется только в том случае, если не сработал ни один из блоков "case".

Есть весьма существенный нюанс. Блок операторов "case" начинается после символа ":" и заканчивается оператором "break". Наличие оператора "break" - не обязательно. Если его нет, то будет проверено следующее условие "case". Проверка условий выполняется всегда до первого совпадения. Естественно, условия здесь только "==".

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

Фактически на PHP: switch case на несколько значений имеет несколько блоков операторов. Для формального следования синтаксису каждый блок операторов должен быть завершен "break".

Как только произошло совпадение условия, исполняется соответствующая секция и, если в ней отсутствует "break", все, что следует за ней. В примере значение переменной "$x" равно 1 и нет ни одного "break", поэтому результат = "-one--two--default-".

Вложенность условных конструкций

Язык не ограничивает разработчика в уровне вложенности. Допускается вкладывать switch case. PHP также не ограничивает программиста в выборе операторов, которые можно использовать внутри case.

Это позволяет делать красивые и легко читаемые алгоритмы. Например, необходимо распознать таблицу правил CSS. Можно сразу установить switch case PHP на распознавание классов и идентификаторов, затем распознавать сами правила. Это очевидное решение, но громоздкое. Как классы, так и идентификаторы используют сходные правила.

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

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

Следующие два примера это два способа записи одного и того же: в первом используется серия операторов if , во втором - оператор switch:

if ($i == 0) { print "i equals 0"; } if ($i == 1) { print "i equals 1"; } if ($i == 2) { print "i equals 2"; } switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; }

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

switch ($i) { case 0: print "i equals 0"; case 1: print "i equals 1"; case 2: print "i equals 2"; }

Здесь, если $i равно 0, PHP выполнит все операторы print! Если $i равно 1, PHP выполнит последние два оператора print, и только если $i равно 2, вы получите "ожидаемое" поведение, и будет выведено только "i equals 2". Итак, важно не забывать записывать операторы break (хотя это может и не понадобиться при некоторых обстоятельствах).

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

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

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

Альтернативный синтаксис структур управления поддерживается в switch. Дополнительно см. Альтернативный синтаксис структур управления .

switch ($i): case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; default: print "i is not equal to 0, 1 or 2"; endswitch;

Целесообразно воспользоваться специальной конструкцией выбора switch-case . Данная конструкция предназначена для выбора действий, в зависимости от значения указанного выражения. Конструкция switch-case чем-то напоминает конструкцию if-else , который, по сути, является ее аналогом. Конструкцию выбора можно использовать, если предполагаемых вариантов много, например, более 5, и для каждого варианта нужно выполнить специфические действия. В таком случае, использование конструкции if-else становится действительно неудобным.

Синтаксис конструкции switch-case такой:

switch(выражение) {

case значение2: команды2;
. . .


}

Принцип работы конструкции switch-case такой:

  1. Вычисляется значение выражения;
  2. Просматривается набор значений. Пусть значение1 равно значению выражения, вычисленного на первом шаге. Если не указана конструкция (оператор) break, то будут выполнены команды i, i+1, i+2, ... , N. В противном случае (есть break) будет выполнена только команда с номером i.
  3. Если ни одно значение из набора не совпало со значением выражения, тогда выполняется блок default, если он указан.

Приведем примеры использования конструкции 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 дважды. Еще пример использования конструкции 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 значение1: команды1;
. . .
case значениеN: командыN;
]
endswitch;

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

$ x = 3 ;
switch ($ x ):
case 0 :
echo "x=0" ;
break;
case 1 :
echo форум портала PHP . SU

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

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

Замечание :

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

Следующие два примера иллюстрируют два различных способа написать то же самое. Один использует серию операторов if и elseif , а другой -- оператор switch :

Пример #1 Оператор switch
if ($i == 0) { echo "i равно 0"; } elseif ($i == 1) { echo "i равно 1"; } elseif ($i == 2) { echo "i равно 2"; } switch ($i) { case 0: echo "i равно 0"; break; case 1: echo "i равно 1"; break; case 2: echo "i равно 2"; break; }
Пример #2 Оператор switch допускает сравнение со строками
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 (даже если вы, возможно, хотите избежать его использования по назначению при определенных обстоятельствах).

В операторе 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"; }

Выражением в операторе case может быть любое выражение, которое приводится в простой тип, то есть в тип integer, или в тип с плавающей точкой (float), или строку. Массивы или объекты не могут быть здесь использованы до тех пор, пока они не будут разыменованы до простого типа.

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

Switch ($i): case 0: echo "i равно 0"; break; case 1: echo "i равно 1"; break; case 2: echo "i равно 2"; break; default: echo "i не равно to 0, 1 или 2"; endswitch;

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

Switch($beer) { case "tuborg"; case "carlsberg"; case "heineken"; echo "Хороший выбор"; break; default; echo "Пожалуйста, сделайте новый выбор..."; break; }

В этой статье мы продолжаем изучать основы PHP и познакомимся с еще одной конструкцией под названием SWITCH – CASE . Суть данной конструкции состоит в том, чтобы выполнить определенное действие в зависимости от значения, которое примет переменная. Действие конструкции SWITCH – CASE аналогично , но позволяет реализовать выбор из нескольких вариантов более компактно и наглядно.

Данная небольшая статья будет состоять из двух частей. В первой мы рассмотрим основы конструкции SWITCH – CASE и узнаем, как она работает. Во второй части мы еще раз проработаем материал, но уже на примере. В качестве примера будем использовать самый простой вариант, где будет выводиться сообщение в зависимости от того, какое значение примет переменная. Благодаря такой конструкции статьи, на мой взгляд, весь материал будет максимально понятным и вы с легкостью сможете понять всю суть конструкции SWITCH – CASE и применять полученные знания на практике.

Синтаксис SWITCH – CASE. Принцип работы конструкции SWITCH – CASE

В PHP синтаксис конструкции SWITCH – CASE имеет следующий вид:

Switch ($a) /*Начинаем конструкцию и прописываем переменную, которую мы будем проверять*/ { case "значение 1": /*Если переменная приняла значение 1*/ действие 1 /*Выполняем действие 1*/ break; /*завершаем выполнение*/ case "значение 2": /*Если переменная приняла значение 2*/ действие 2 /*Выполняем действие 2*/ break; /*Завершаем выполнение*/ … default: /*Если ни один из вариантов не подходит*/ действие по умолчанию /*Выполнить действие по умолчанию*/ break; /*Завершить выполнение конструкции SWITCH - CASE*/ }

Как видите, для наглядности я привел краткий комментарий для каждой строки. Если быть кратким, то на практике чаще всего происходит следующее. Переменной, например, методом POST, передается определенное значение. Затем при помощи конструкции SWITCH – CASE переменная проверяется. Если есть совпадение, то выполняется определенное действие и проверка завершается. В случае, если переменной не было передано никакое значение, то выполняется операция, заданная по умолчанию.

Как вы уже могли заметить, все очень просто и понятно. Как уже говорилось выше, конструкцию SWITCH – CASE можно было бы заменить конструкцией IF – ELSE, но в этом случае код был бы куда более громоздким. Для наглядности, приведу пример такого же кода, но реализованного при помощи конструкции IF.

If ($vibor == "значение 1") { действие 1 } if ($vibor == "значение 2") { Действие 2 } …

Конструкция SWITCH – CASE. Пример использования

Пускай у нас есть сайт компании, которая занимается обучением людей программированию. Основными языками программирования есть PHP и C++. Нам нужно, чтобы при заказе курсов по обучению пользователь выбрал нужный ему язык программирования и ему выдавалось соответствующее сообщение. Данное решение можно реализовать при помощи конструкции SWITCH – CASE.

$vibor = "PHP"; switch ($vibor) { case "PHP": echo "Выбран язык программирования - $vibor. Для его изучения…"; break; case "C++": echo "Выбран язык программирования - $vibor. Для его изучения..."; break; case "Другой": echo "Вы также можете выбрать другой язык программирования из списка…"; break; default: echo "Вы не выбрали, какой язык программирования хотите изучить."; break; }

В примере выше переменной $vibor изначально было уже присвоено значение. На практике это значение присваивается в зависимости от того, какой вариант выберет пользователь. После этого значение проверяется при помощи конструкции SWITCH – CASE. Если находится сходство, то выполняется определенное действие. В нашем случае выводится сообщение с инструкцией. Если пользователь не выбрал нужный вариант, то ему сайт выдаст сообщение, заданное по умолчанию.

В нашем примере переменная получила значение «PHP». В результате этого пользователь получит сообщение «Выбран язык программирования — PHP. Для его изучения…», после чего выполнение конструкции SWITCH – CASE завершается и выполняется остальная часть документа, которая следует после закрывающей фигурной скобки. Как видите, в сообщении была использована переменная, которая автоматически заменится на ее значение. Об этом вы можете прочитать в первой статье про PHP под названием « ».

На этом статья подходит к концу. Думаю, мне удалось объяснить всю суть конструкции SWITCH – CASE и вопросов возникнуть не должно. Если вы впервые на блоге и не хотите пропустить появления других статей, рекомендую вам подписаться на новости блога любым другим удобным для вас способом в пункте « » либо воспользоваться формой ниже.

На этом все. Удачи вам и до скорых встреч на страницах блога




Close