Сравниваем переменную или выражение с различными значениями в PHP. Условия в PHP Примеры php с функцией random и switch

  • 20.06.2020

В этой статье мы продолжаем изучать основы 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 и вопросов возникнуть не должно. Если вы впервые на блоге и не хотите пропустить появления других статей, рекомендую вам подписаться на новости блога любым другим удобным для вас способом в пункте « » либо воспользоваться формой ниже.

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

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

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

Следующие два примера это два способа записи одного и того же: в первом используется серия операторов 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;

Всем привет! Вот и очередной урок по PHP подоспел. Сегодняшняя тема – одна из самых любимых у тех, кто начинает программировать. Ещё бы, ведь условия в PHP – это то, что позволяет нам составлять различные алгоритмы. Именно в зависимости от условий программа будет вести себя так или иначе. И именно благодаря им мы можем получать разный результат при разных входных данных. В PHP имеются несколько конструкций, с помощью которых можно реализовать условия. Все они используются, и имеют свои преимущества в разных ситуациях, или, если хотите – условиях. Кругом одни условия, не так ли? Так. Никто ведь не будет спорить, что в реальной жизни в зависимости от обстоятельств мы поступаем по-разному. В программировании это не менее важно и сейчас мы этому научимся.

Как вы должны помнить из прошлого урока, в PHP, в зависимости от оператора, операнды приводятся к определённому типу. Для операторов условий в PHP действуют те же правила, и здесь операнд всегда приводится к булевому значению. В случае, если это значение true , то считаем, что условие выполнено, а в случае, если false – то условие не выполнено. В зависимости от того, выполнено ли условие, мы можем делать или не делать какие-либо действия. И тут я предлагаю рассмотреть первый условный оператор – if .

Условный оператор if

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

А в реальной жизни использование оператора if выглядит следующим образом:

Здесь мы явно передали оператору значение true . Разумеется, это абсолютно бессмысленно. Давайте с помощью условия будем определять числа больше 10. Это довольно просто:

10) { echo "Число больше 10"; }

И после запуска мы увидим результат:

Число больше 10

Конструкция if-else

А можно ли сделать так, чтобы, когда условие не выполнилось, выполнился другой код? Конечно можно! Для этого вместе с оператором if используют оператор else (по-русски - иначе). Он пишется после фигурных скобок, в которые заключается код, выполняющийся при выполненном условии. И выглядит конструкция следующим образом:

10) { echo "Число больше 10"; } else { echo "Число меньше либо равно 10"; }

Здесь опять же на экран будет выведено сообщение:

Число больше 10

Однако если мы изменим входные данные, и переменной $x в самом начале присвоим значение 8 , то выведется сообщение:

Число меньше либо равно 10

Попробуйте сделать это прямо сейчас.

Конструкция if-elseif-else: несколько условий

В случае, если вам нужно проверить несколько условий, после оператора if добавляется ещё и оператор elseif . Он проверит условие, только если не выполнится первое условие. Например:

10) { echo "Число больше 10"; } elseif ($x == 10) { echo "Число равно 10"; }

В данном случае, на экран будет выведено:

Число равно 10

И да, после этого оператора можно добавить else . Код внутри него будет выполнен, если не выполнилось ни одно из условий:

10) { echo "Число больше 10"; } elseif ($x == 10) { echo "Число равно 10"; } else { echo "Число меньше 10"; }

Результат этого кода, я полагаю, объяснять не нужно. Да, кстати, возможен целый список из elseif -ов. Например, такой:

Приведение к boolean

Помните, в уроке про мы с вами научились явно приводить значения к какому-либо типу. Например:

Результатом будет true .
Работающее так же, только неявное преобразование, всегда происходит в условии. Например, следующее условие:

Выполнится успешно, так как число 3 будет преобразовано к true . К false будут приводиться следующие значения:

  • "" (пустая строка)
  • 0 (число 0)

Таким образом, любое ненулевое число и ненулевая строка будут преобразованы в true и условие выполнится. Исключение – строка, состоящая из одного нуля:

Она также будет преобразована к false .

Я затронул эту тему с приведением к boolean в домашнем задании к этому уроку. Обязательно его выполните. А сейчас давайте перейдём к следующему условному оператору.

Оператор switch

Помимо конструкции if-else есть ещё один оператор условия. Это – switch . Это очень интересный оператор, требующий запоминания нескольких правил. Давайте для начала посмотрим, как он выглядит на следующем примере:

Сначала может показаться, что этот оператор довольно сложный. Однако, если разобраться, то всё становится понятно. В операнде switch указывается некоторое выражение. В нашем случае, это переменная $x , а точнее её значение - 1 .

В фигурных скобках мы перечисляем операторы case , после которых указываем значение, с которым сравнивается значение операнда switch . Сравнение происходит нестрогое, то есть как будто используем оператор ==. И если условие выполнилось, то выполняется код, указанный после двоеточия. Если же ни одно из условий не выполнилось, то выполняется код из секции default , которой в общем-то может и не быть, и тогда ничего выполняться не будет. Обратите внимание, внутри каждой секции case , в конце мы прописали оператор break . Это делается для того, чтобы после выполнения кода в случае выполнения условия не продолжилась проверка условий. То есть, если бы не было break в конце секции case 1 , то после того, как вывелся бы текст

Число равно 1

продолжило бы выполняться условие сравнения с 2 , а затем бы выполнился и код в секции default . Не забывайте писать break !

Сравнение switch с if

Вообще, этот код можно было бы записать и с помощью конструкции if-elseif-else :

Но в виде конструкции switch-case код в конкретно этом случае выглядит проще. И вот почему:

  1. мы сразу видим, что конкретно мы сравниваем (переменную $x ) и понимаем, что сравниваем в каждом условии именно это значение, а не какое-либо ещё;
  2. глазу удобнее воспринимать то, с чем сравниваем – секции case 1 , case 2 визуально воспринимаются легче, сравниваемое значение заметнее.

И снова про switch

И я ещё не всё сказал про switch - можно писать несколько case -ов подряд, тогда код выполнится при условии, что выполнен хотя бы один из них. Например:

Согласитесь, это может быть удобно.

Хорошо, давайте пройдёмся по особенностям оператора switch , о которых нужно помнить всегда.

  1. break прерывает набор условий, не забывайте указывать его;
  2. секция default будет выполнена, если не выполнилось ни одно из условий. Она может и вовсе отсутствовать;
  3. несколько case -ов могуть быть записаны подряд, тогда код в секции выполнится при выполнении хотя бы одного из условий.

Немного практики

Ну что, запомнили операторы условий? Давайте закрепим на практике более реальными примерами.

Чётное или нечётное

Вот один из примеров – нужно определить, чётное ли число или нет. Для этого нам нужно проверить, что остаток от деления на 2 будет равен 0 . Подробнее об операторах читайте . Давайте сделаем это:

Попробуйте самостоятельно изменить значение переменной $x . Круто, да? Оно работает!

Модуль

Давайте теперь научимся вычислять модуль числа. Если число больше или равно нулю, то нужно вывести само это число, если меньше – заменить знак с минуса на плюс.

= 0) { echo "Модуль числа: " . $x; } else { echo "Модуль числа: " . -$x; }

Результат:

Модуль числа: 2

Как мы видим, всё успешно отработало.

Тернарный оператор

Помимо этого, в PHP есть ещё один оператор, который представляет собой сокращённую форму конструкции if-else . Это тернарный оператор. При этом он возвращает разные результаты, в зависимости от того, выполнено ли условие или нет. В общем виде его использование выглядит следующим образом:

Условие? результат_если_true: результат_если_false

Или на примере того же нахождения модуля:

= 0 ? $x: -$x; echo "Модуль: " . $mod;

Результат:

Модуль: 2

Круто, да? Тернарный оператор – очень элегантно вписывается при решении таких вот простеньких задачек.

И ещё немного практики

Условия можно помещать внутрь друг друга и вообще, чего с ними только можно не делать. Например:

0) { if ($x >= 100) { echo "Число больше либо равно 100"; } else { echo "Число больше 0 но меньше 100"; } } else { echo "Число меньше либо равно 0"; }

Итог

Друзья, надеюсь вам понравился урок. Если это так – буду рад, если вы поделитесь им в социальных сетях или расскажете друзьям. Это лучшая поддержка проекта. Спасибо тем, кто это делает. Если у вас возникли какие-то вопросы или замечания – напишите об этом в комментариях. А сейчас – все быстренько делаем домашнее задание, там ещё больше интересных примеров с условиями. Всем пока!