Оператор 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 является аналогом конструкции IF ELSEIF ELSE и позволяет выполнять различные действия в зависимости от значения.

В следующем коде можно увидеть, как одну и ту же задачу можно решить с помощью if и switch:

Конструкция switch использует нестрогое сравнение == .

В круглые скобки мы помещаем значение, которое будет сравниваться с остальными. Затем идёт case , сравниваемое значение и двоеточие. Затем идут команды, которые нужно выполнить. Блок default выполнится, если не выполнен ни один блок case.

Команда break прерывает текущее выполнение switch. Дело в том, что switch выполняет все команды подряд, даже если они находятся в разных блоках case:

"; case 2: echo "Статус: Передан в доставку
"; break; case 3: echo "Статус: Выполнен
"; break; } ?>

Результат в браузере:

Статус: Обрабатывается Статус: Передан в доставку

Как видите, выполнились 2 блока case. 1-ый - потому что подходит по условию, второй - потому что в 1-ом блоке отсутствует break.

Несколько значений в CASE

Также в switch можно использовать один блок кода для нескольких значений:

Обычно выбор между if и switch делается исходя только из предпочтений разработчика. Лично я никогда не использую swtich просто потому что конструкции if-elseif-else мне нравятся больше.

Оператор switch является аналогом конструкции IF ELSEIF ELSE и позволяет выполнять различные действия в зависимости от значения.

В следующем коде можно увидеть, как одну и ту же задачу можно решить с помощью if и switch:

Конструкция switch использует нестрогое сравнение == .

В круглые скобки мы помещаем значение, которое будет сравниваться с остальными. Затем идёт case , сравниваемое значение и двоеточие. Затем идут команды, которые нужно выполнить. Блок default выполнится, если не выполнен ни один блок case.

Команда break прерывает текущее выполнение switch. Дело в том, что switch выполняет все команды подряд, даже если они находятся в разных блоках case:

"; case 2: echo "Статус: Передан в доставку
"; break; case 3: echo "Статус: Выполнен
"; break; } ?>

Результат в браузере:

Статус: Обрабатывается Статус: Передан в доставку

Как видите, выполнились 2 блока case. 1-ый - потому что подходит по условию, второй - потому что в 1-ом блоке отсутствует break.

Несколько значений в CASE

Также в switch можно использовать один блок кода для нескольких значений:

Обычно выбор между if и switch делается исходя только из предпочтений разработчика. Лично я никогда не использую swtich просто потому что конструкции if-elseif-else мне нравятся больше.

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

Замечание:

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

Замечание:

Заметьте, что конструкция switch/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 допускает сравнение с типом 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 (даже если вы, возможно, хотите избежать его использования по назначению при определенных обстоятельствах).

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

Возможен альтернативный синтаксис для управляющей структуры 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; }

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