Советы        15.03.2024   

Скрипты php с использованием switch. Условия в PHP. Тернарный оператор 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;

Всем привет! Вот и очередной урок по 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"; }

Итог

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

Оператор 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 мне нравятся больше.

Часто вместо нескольких расположенных подряд операторов 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 .

"; case "SWEEM": echo "Я люблю плавать.
"; case "FLY": echo "Хотел бы я научиться летать.
"; default: echo "Что-то мне вообще лень, что-либо делать."; } ?>

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

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

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

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

На уроке будут рассмотрены условные операторы php: оператор if и оператор переключения switch

Условные операторы php представлены тремя основными конструкциями:

  • оператор условия if ,
  • оператор переключения switch
  • и тернарный оператор .

Рассмотрим подробнее каждый из них.

PHP оператор if

Рис 3.1. Условный оператор IF, укороченный вариант


Рис. 3.2. Синтаксис условного оператора IF ELSE


Рис. 3.3. Полный синтаксис условного оператора IF elseif

Подытожим:

Полный синтаксис:

if (условие) { // если условие истинно operator1; operator2; } elseif(условие) { operator1; ... } else { // если условие ложно operator1; operator2; }

  • Укороченный синтаксис может не содержать части конструкции с else и не содержать дополнительного условия elseif
  • Вместо служебного слова elseif можно писать else if (отдельно)
  • В одной конструкции if может быть несколько elseif . Будет выполнено первое встретившееся выражение elseif равное TRUE .
  • В случае наличия альтернативного условия elseif конструкция else должна идти последней в синтаксисе.

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

Рис. 3.4. Условный оператор If и Endif в php

Пример:

if($x > $y): echo $x." больше, чем ".$y; elseif($x == $y): // при использовании ":" нельзя писать раздельно else if echo $x." равно ".$y; else: echo $x." не > и не = ".$y; endif;

Важно: При использовании в конструкции двоеточия вместо фигурных скобок elseif нельзя писать в два слова!

Логические операции в условии

В условии if в скобках могут присутствовать следующие операции:

Пример: проверить значение числовой переменной: если оно меньше либо равно 10, — выдавать сообщение «число меньше или равно 10» , в обратном случае выдавать сообщение «число больше 10»


Решение:

$number=15; if ($number <=10) { echo "число меньше или равно 10"; } else { echo "число больше 10"; }

Блоки php кода можно разрывать, рассмотрим пример:

Пример: Выводить на экран html-код «а равно 4» , если переменная $a действительно равна 4


1 Решение:
1 2 3 4

2 Решение:

1 2 3 A равно 4

A равно 4

Задание php 3_1: Выводить перевод цветов с английского языка на русский, проверяя значение переменной (в которой присвоен цвет: $a="blue")


Задание php 3_2: Найти максимальное из трех чисел

Операции сравнения и правило лжи

В конструкции if в скобках должно находиться логическое выражение или переменная, которые рассматриваются с точки зрения алгебры логики, возвращающая значения либо true либо false

Т.е. в качестве условия может выступать единственная переменная. Рассмотрим пример:

1 2 3 4 $a = 1 ; if ($a ) { echo $a ; }

$a=1; if ($a) { echo $a; }

В примере транслятор языка php будет рассматривать переменную в скобках на правило лжи:

Правило ЛЖИ или что считается ложным:

  • логическое False
  • целый ноль (0 )
  • действительный ноль (0.0 )
  • пустая строка и строка «0»
  • массив без элементов
  • объект без переменных
  • специальный тип NULL

Таким образом, в рассмотренном примере переменная $a равна единице, соответственно условие будет истинным и оператор echo $a; выведет на экран значение переменной.

Задание php 3_3: дана переменная а со строковым значением. Если а равна имени, то выводить «Привет, имя!» , если а равна пустому значению, то выводить «Привет, незнакомец!»

Логические конструкции И ИЛИ и НЕ в условном операторе

  1. Иногда необходимо предусмотреть выполнение одновременно нескольких условий. Тогда условия соединяются логическим оператором И — && :
  2. $a=1; if ($a>0 || $a>1) { echo "a > 0 или a > 1"; }

  3. Для указания ложности условия используется логический оператор НЕ — ! :
  4. 1 2 3 4 $a = 1 ; if (! ($a < 0 ) ) { echo "a не < 0" ; }

    $a=1; if (!($a<0)) { echo "a не < 0"; }

Оператор Switch PHP

Оператор switch или «переключатель» заменяет несколько подряд идущих конструкций if . При этом он сравнивает одну переменную с множеством значений. Таким образом, это наиболее удобное средство для организации мультиветвления .

Синтаксис:

1 2 3 4 5 6 7 8 9 10 switch ($переменная ) { case "значение1" : оператор1 ; break ; case "значение2" : оператор2 ; break ; case "значение3" : оператор3 ; break ; [ default : оператор4 ; break ; ] }

switch($переменная){ case "значение1": оператор1; break; case "значение2": оператор2; break; case "значение3": оператор3; break; }

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

Рис. 3.5. Условный оператор Switch


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


Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $names = array ("Иван" , "Петр" , "Семен" ) ; switch ($names [ 0 ] ) { case "Петр" : echo "Привет, Петя!" ; break ; case "Иван" : echo "Привет, Ваня!" ; break ; case "Семен" : echo "Привет, Ваня!" ; break ; default : echo "Привет, $names !" ; break ; }

$names=array("Иван","Петр","Семен"); switch($names){ case "Петр": echo "Привет, Петя!"; break; case "Иван": echo "Привет, Ваня!"; break; case "Семен": echo "Привет, Ваня!"; break; default: echo "Привет, $names!"; break; }

Задание php 3_4:

  • Создайте переменную $day и присвойте ей произвольное числовое значение
  • С помощью конструкции switch выведите фразу «Это рабочий день» , если значение переменной $day попадает в диапазон чисел от 1 до 5 (включительно)
  • Выведите фразу «Это выходной день» , если значение переменной $day равно числам 6 или 7
  • Выведите фразу «Неизвестный день» , если значение переменной $day не попадает в диапазон чисел от 1 до 7(включительно)

Дополните код:

1 2 3 4 5 6 7 8 9 10 11 12 ... switch (... ) { case 1 : case 2 : ... echo "Это рабочий день" ; break ; case 6 : ... default : ... }

Switch(...){ case 1: case 2: ... echo "Это рабочий день"; break; case 6: ... default: ... }

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

Тернарный оператор , т.е. с тремя операндами, имеет достаточно простой синтаксис, в котором слева от знака? записывается условие, а справа — два оператора разделенные знаком: , слева от знака выполняется оператор при истинности условия, а справа от знака: выполняется оператор при ложном условии.

условие? оператор1 : оператор2 ;