Переключатель switch в php

PHP: switch

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

Оператор switch сравнивает значение условного выражения с несколькими значениями.

Как правило, в качестве выражения используется переменная, в зависимости от значения которой должен быть исполнен тот или иной блок кода. Для сравнения в switch используется оператор равенства (==).

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

Обратите внимание

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

Первый способ использует серию операторов if и elseif, а второй — оператор switch:

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

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

case

Обратите внимание, что за ключевым словом 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.

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

С этой темой смотрят:

  • if else
  • Тернарный оператор
  • Альтернативный синтаксис

Источник: https://puzzleweb.ru/php/18_switch.php

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

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

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

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

Конструкция выбора 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 будет исполнена в виде функций, первая работает на уровне значений, вторая — на уровне правил, а третья вызывается с уровня конкретного класса или идентификатора.

Источник

Источник: https://ruud.ru/it/19121-konstrukciya-vybora-switch-case-php/

Принятие решений PHP — ElseIf Switch

Операторы if , elseif … else и switch используются для принятия решения на основе другого условия.

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

  • If … else statement — использовать этот оператор, если вы хотите выполнить набор кода, когда условие истинно, а другое, если условие не верно
  • ElseIf оператор — используется с , если … Else , чтобы выполнить набор кода , если один из нескольких условие истинно
  • Оператор switch — используется, если вы хотите выбрать один из многих блоков кода, который должен быть выполнен, используйте оператор Switch. Оператор switch используется для избежания длинных блоков if .. elseif.. else code.

Определение If … Else

Если вы хотите выполнить некоторый код, если условие истинно, а другой код, если условие ложно, используйте инструкцию if … else.

Синтаксисif (condition) //если ( условие ) код, который должен быть выполнен, если условие истинно;
else //еще код, который должен быть выполнен, если условие ложно;
пример

Следующий пример будет выводить «У вас хороший уик-энд!». если текущий день — пятница, в противном случае он выведет «Приятного дня! »:

Определение ElseIf

Если вы хотите выполнить некоторый код, если одно из нескольких условий истинно, используйте оператор elseif

Синтаксисif (condition) /если(условие) код, который должен быть выполнен, если условие истинно;
elseif (condition) еще если (условие) код, который должен быть выполнен, если условие истинно;
else //еще код, который должен быть выполнен, если условие ложно;
пример

Следующий пример будет выводить «У вас хороший уик-энд!». если текущий день — пятница, и «Приятного воскресенья!» если текущий день — воскресенье. В противном случае он выведет «Приятного дня!» —

Определение переключателя — Switch

Если вы хотите выбрать один из многих блоков кода, который должен быть выполнен, используйте оператор Switch. Оператор switch используется для избежания длинных блоков if .. elseif .. else code.

Синтаксисswitch (expression) { case label1: code to be executed if expression = label1; //код, который должен быть выполнен, если выражение = label1; break; case label2: code to be executed if expression = label2; //код, который должен быть выполнен, если выражение = label2; break; default: //по умолчанию code to be executed // код, который должен быть выполнен if expression is different //если выражение отличается from both label1 and label2; //от обоих label1 и Label2; }
пример

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

Это приведет к следующему результату —

Сегодня понедельник

 С уважением, авторы сайта Компьютерапия

Источник: https://maxfad.ru/programmer/osnovy-php/371-prinyatie-reshenij-php-elseif-switch.html

Урок 9. PHP — Switch

В предыдущих уроках мы рассмотрели различные элементы, которые позволяют организовать проверку условия в PHP. Тем не менее, бывают случаи, когда оператор IF…Else не самый эффективный способ для проверки определенных условий.

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

В таком случае вы можете иметь 20 различных вариантов, которые вы должны обработать с безумно длинным блоком If / ElseIf / ElseIf / ElseIf / … и так далее. Да уж, выглядит неважно, давайте посмотрим, можем ли мы сделать что-то другое.

PHP оператор Switch: Быстрая проверка

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

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

PHP оператор Switch: Пример

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

$destination = «Tokyo»; echo «Отправляемся в $destination
«; switch ($destination){ case «Las Vegas»: echo «Берем с собой $5000! Вегас детка!»; break; case «Amsterdam»: echo «Парочка газет, фольга…»; break; case «Egypt»: echo «50 бутылок солнцезащитного крема.»; break; case «Tokyo»: echo «Берем деньги на сувениры.»; break; case «Caribbean Islands»: echo «Захватите трусы для плавания!»; break; }

Результат: Отправляемся в Tokyo

Берем деньги на сувениры.

Значение переменной $destination было Токио, поэтому, когда PHP выполнял оператор свитч, то на $destination он сразу сделал поиск для случая со значением «Токио». Он нашел его и продолжил выполнять код, который был прописан в этом сегменте.

Вы могли заметить, что каждый случай содержит break. Этот break как раз и позволяет во всех остальных случаях ничего не выполнять. Если бы в приведенном выше примере не было брейка, то код бы выполнялся не только в случае значения Токио! Используйте эти знания и никогда не нагромождайте десятки условий там, где можно обойтись одним свитчем!

Форма Switch достаточно уникальна, поэтому потратьте некоторое время на ее рассмотрение, прежде чем двигаться дальше. Примечание: начинающие программисты пренебрегают этой конструкцией, что неправильно и затрудняет чтение кода, а так же негативно сказывается на производительности!

PHP оператор Switch: действие по умолчанию

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

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

$destination = «New York»; echo «Отправляемся в $destination
«; switch ($destination){ case «Las Vegas»: echo «Берем с собой $5000! Вегас детка!»; break; case «Amsterdam»: echo «Парочка газет, фольга…»; break; case «Egypt»: echo «50 бутылок солнцезащитного крема.»; break; case «Tokyo»: echo «Берем деньги на сувениры.»; break; case «Caribbean Islands»: echo «Захватите трусы для плавания!»; break; default: echo «Бельишко чистое не забудьте!»; break; }

Результат: Отправляемся в New York

Бельишко чистое не забудьте!

Готово! Теперь вы умеете обращаться с PHP конструкцией Switch и знаете в каких случаях ее лучше использовать.

← Условный оператор | Содержание | Функции →

Источник: https://myblaze.ru/urok-9-php-switch/

Использование PHP switch

Использование PHP switch позволяет произвести выбор из нескольких возможных вариантов по определенному условию и сегодня вы в этом убедитесь.

Использование оператора switch в PHP

Switch является конструкцией выбора и по принципу своей работы очень напоминает условные операторы if, else, elseif. Принцип работы данной конструкции состоит в следующем:

Читайте также:  Html тег ul - подробное описание с примерами

В самом начале задается некоторая переменная или даже выражение, далее следует набор возможных значений; и если одно из значений совпадает со значением нашей переменной или с результатом выражения, то выполняется блок инструкций, соответствующий этому значению; если же ни одно из возможных значений не совпадает, то будет выполнен блок инструкций, расположенный внутри конструкции default:.

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

switch (выражение или переменная) { case значение1: блок_инструкций_1 break; case значение2: блок_инструкций_2 break; … default: блок_инструкций_3

}

Несмотря на очевидное родство с условными операторами, принцип работы у них все–таки разный. Конструкция выбораswitch не приводит выражение к логическому виду и не производит его обработку, а лишь только сравнивает с заданными значениями. Такой принцип бывает очень полезен при отладке программы, когда мы должны получить на выходе определенное значение.

Обратите внимание

А теперь, пришло время рассмотреть пример, который наглядно покажет особенности использования PHP switch:

Число равно 1 !

В данном примере мы создаем массив чисел, содержащий 3 числа:

$a = array(1,2,3);

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

default:
echo «Это не 1 ил 2 или 3»;

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

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

Источник: http://www.eltisbook.ru/php/switch.php

Switch. Условные конструкции в PHP. Часть 2

В первой части статьи про условия в PHP мы разбирались про синтаксис и примеры использования конструкции if…else…. В этой заметке мы продолжим рассматривать управляющие условные конструкции в PHP.

Речь здесь пойдет о конструкции ветвлений switch (case). Мы рассмотрим его в сравнении с конcтрукцией if..

else, и на примерах разберем случаи, когда выгодней использовать switch вместо if.

Проблема использования IF

Как я уже сказал switch используется для построения условных конструкций. Давайте сначала напишем сложное ветвление с помощью if…else:

Что мы здесь имеем. Переменную $a со значением 4. И кучу условий, которые по очередно сравнивают значение переменной $a сначала с 1, затем с 2 и т.д. до 5. Если в какой то момент условие выполняется, то на экран выводится строка. В нашем случае на экран выведется строка:

Громоздкая конструкция не так ли? Лично у меня от нее рябит в глазах…

Использование Switch

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

Синтаксис switch:

switch (выражение) { case 'значение 1': группа операторов 1; break; …………………… case 'значение n': группа операторов n; break; default: группа операторов по умолчанию; break; }

Логика работы как и в предыдущем примере с if. Выражение, которое стоит в switch поочередно (сверху вниз) сравнивается со значениями в case.

Если соответствие найдено, то выполняется группа операторов в этой ветке case.

Ветка default выполняется в том случае, если выражение не равно ни одному значению из case.

Важно: в этом описание использовано новое для вас ключевик слово break. Это ключевое слово используется для выхода из конструкции наружу (во внешний блок).

Если мы уберем break, то после выполнения кода в ветке с соответствующим значением, будут выполняться все ветки, которые расположены ниже. Это типичная ошибка начинающих программистов.

Будьте внимательны!

Рассмотрим использование switch на нашем примере:

Выполните этот код и посмотрите результат выполнения.

Теперь я по мере возможности буду давать небольшие задания по уроку. Эти задания помогут вам отработать и запомнить места, где возможно совершение ошибок при программировании. Также с их помощью вы более полно овладеете темой. Хотелось бы в комментариях услышать ваше мнение насчет этой идеи.

Самостоятельные задания:

  • Измените значение переменной $a так, чтобы попасть в другую ветку и в ветку выполняющуюся по умолчанию (default).
  • Удалите  break из кода и посмотрите, как поведет себя код.

На сегодня все.

Источник: http://afirewall.ru/switch-uslovnye-konstrukcii-v-php-chast-2

Основы PHP — Конструкция SWITCH — CASE

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

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

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

Важно

Данная небольшая статья будет состоять из двух частей. В первой мы рассмотрим основы конструкции 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 под названием «Знакомство с PHP. Переменные, операторы вывода, операции с переменными».

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

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

Постовой: Практические рекомендации по созданию дизайна блогов. Большая подборка примеров дизайна.

Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter

Источник: https://archive.dmitriydenisov.com/osnovy-php-konstrukciya-switch-case/

switch

Оглавление

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

switch ($i) { case 0: case 1: case 2: print «i is less than 3 but not negative»; break; case 3: print «i is 3»; }

Особый случай — default case (case по умолчанию). Этот case совпадёт со всем, с чем не совпали все предыдущие case, и должен быть самым последним case. Например:

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»; }

Выражением 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;

Оглавление

Источник: http://www.codenet.ru/webmast/php/PHP4-Manual/switch.php

теги текст очистить — Лучший способ сделать PHP-переключатель с несколькими значениями для каждого случая?

Нет версии 2 на самом деле не работает, но если вы хотите такого подхода, вы можете сделать следующее (возможно, не самое быстрое, но, возможно, более интуитивное):

switch (true) { case ($var === 'something' || $var === 'something else'): // do some stuff break;

}

Некоторые другие идеи еще не упомянуты:

switch(true){ case in_array($p, array('home', '')): $current_home = 'current'; break; case preg_match('/^users.(online|location|featured|new|browse|search|staff)$/', $p): $current_users = 'current'; break; case 'forum' == $p: $current_forum = 'current'; break; }

Кто-то, вероятно, будет жаловаться на проблемы читаемости с # 2, но у меня не будет проблем с наследованием такого кода.

Обратите внимание

Для полноты я укажу, что сломанная логика «Версия 2» может быть заменена оператором switch, который работает, а также использует массивы как по скорости, так и по ясности:

// used for $current_home = 'current';
$home_group = array( 'home' => True,
); // used for $current_users = 'current';
$user_group = array( 'users.online' => True, 'users.location' => True, 'users.featured' => True, 'users.new' => True, 'users.browse' => True, 'users.search' => True, 'users.staff' => True,
); // used for $current_forum = 'current';
$forum_group = array( 'forum' => True,
); switch (true) { case isset($home_group[$p]): $current_home = 'current'; break; case isset($user_group[$p]): $current_users = 'current'; break; case isset($forum_group[$p]): $current_forum = 'current'; break; default: user_error(«$p is invalid», E_USER_ERROR);
}

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

$current_home = null;
$current_users = null;
$current_forum = null; $lotsOfStrings = array('users.online', 'users.location', 'users.featured', 'users.new'); if(empty($p)) { $current_home = 'current';
} if(in_array($p,$lotsOfStrings)) { $current_users = 'current';
} if(0 === strcmp('forum',$p)) { $current_forum = 'current';
}

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

// used for $current_home = 'current';
$group1 = array( 'home' => True, ); // used for $current_users = 'current';
$group2 = array( 'users.online' => True, 'users.location' => True, 'users.featured' => True, 'users.new' => True, 'users.browse' => True, 'users.search' => True, 'users.staff' => True, ); // used for $current_forum = 'current';
$group3 = array( 'forum' => True, ); if(isset($group1[$p])) $current_home = 'current';
else if(isset($group2[$p])) $current_users = 'current';
else if(isset($group3[$p])) $current_forum = 'current';
else user_error(«$p is invalid», E_USER_ERROR);

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

Я думаю, что версия 1 — это путь. Это намного легче читать и понимать.

Источник: https://code-examples.net/ru/q/13fc20

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