Oc-windows.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php switch case default

switch

(PHP 4, PHP 5, PHP 7)

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

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

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

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

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

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

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

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

Php switch case default

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

Читать еще:  Php request params

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

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

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

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

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

php
$ 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:

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

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

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

php
$ 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, если он указан, например:

php
$ 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:

php
$ 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: switch

Оператор switch

Часто вместо нескольких расположенных подряд операторов if else целесообразно воспользоваться специальной конструкцией switch-case . Оператор switch сравнивает значение условного выражения с несколькими значениями. Как правило, в качестве выражения используется переменная, в зависимости от значения которой должен быть исполнен тот или иной блок кода. Для сравнения в switch используется оператор равенства ( == ).

Представим себе переменную $action , которая может иметь значения «JUMP» (прыгать), «SWEEM» (плавать), «FLY» (летать). Оператор switch позволяет легко определить блок кода, который должен исполняться для каждого из этих значений. Чтобы показать разницу между операторами if и switch , выполним проверку переменной на соответствие нескольким значениям. Следующий пример показывает два различных способа сделать то же самое. Первый способ использует серию операторов if и elseif , а второй — оператор switch :

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

Читать еще:  Php pdo execute

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

Обратите внимание, что за ключевым словом case каждый раз следует значение (литерал), после которого должно обязательно стоять двоеточие. Тип значения, указанного после оператора case , должен совпадать с типом значения возвращаемого условием. Перед началом исполнения тела (содержимое между фигурными скобками) оператора switch , переменная указанная в скобках, должна быть инициализирована каким-нибудь значением, поскольку это значение будет сравниваться со значениями, указанными после case. Инструкции, расположенные после case , будут исполняться до тех пор, пока не встретится оператор break .

Примечание: в операторе case может быть использовано любое выражение, которое приводится к простому типу, то есть к числу ( integer ), вещественному числу ( float ), строке ( string ) или логическому значению ( bool ).

break

Если должен быть выполнен только один блок кода, соответствующий определенному значению, то в конце этого блока следует вставить ключевое слово break . Интерпретатор PHP, встретив ключевое слово break , завершает работу оператора switch и переходит к исполнению инструкции, расположенной после закрывающей фигурной скобки оператора switch .

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

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

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

continue

Обратите внимание: оператор continue применяется в конструкциях switch и действует подобно оператору break .

Выбор по умолчанию

Если значение условного выражения не совпало ни с одним из предложенных значений в секциях case, оператор switch позволяет выполнить некоторые действия по умолчанию. Для этого используется ключевое слово default . Работает оно следующим образом: если значение возвращаемое условием не совпало ни с одним из предложенных значений в секциях case, оператор switch начинает выполнение инструкций расположенных в секции default .

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

Дополнительные сведения

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

Читать еще:  Снять защиту doc

На последок хотелось бы упомянуть о том, что вместо двоеточия после операторов case и default , можно использовать точку с запятой:

Примеры switch case в PHP

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

Пример 1

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

Вопрос: Назовите страну из первой тройки с самой большой численностью населения?

Как работает оператор switch?

Когда участник введёт слово, например Китай, это слово запишется в переменную $pop, оператор switch пройдется по меткам (case) по порядку, пока значение переменной не совпадет с одним из значений кейса, тогда на экран выведется: Китай занимает первое место. Но если участник введет, например слово Россия, которого нет в коде программы, то switch, не обнаружив совпадений, наткнется на break и перейдет к выполнению дефолтным инструкций, выведет на экран: Вам надо подучить географию.

Break не обязателен

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

Давайте посмотрим на примере, что произойдет, если в скрипте после case не будет ключевого слова break.

Пример 2

Рассмотрим на примере сказки Репка, мы уже забыли в каком порядке персонажи сказки тянут друг за другом репку.

В переменной $repka оказалась мышка, оператор switch обнаружил мышку и ничто ему не мешает перебрать все кейсы и вывести их значения по порядку. Выполняются все кейсы, идущие следом за совпадающими значениями.

Мышка за кошку
Кошка за жучку
Жучка за внучку
Внучка за бабку
Бабка за дедку
Дедка за репку

Но когда в переменную попадает дедка, то на экран выведется только последний кейс.

Пример 3

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

Пример, классической манипуляции, пользователь вводит любой сорт сыра из кейсов, то ему на экране выводится приятное сообщение Вы настоящий гурман. Если пользователь введет название какого-нибудь дешевого сыра, то увидит обидное сообщение – У вас непритязательный вкус.

Выводы

Когда же лучше использовать конструкцию switch-case, если if-else, делает тоже самое. Используйте оператор switch, когда надо сравнивать больше, чем два значения или ваше условие сложнее, чем простое сравнение.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    Ссылка на основную публикацию
    Adblock
    detector