Современные гаджеты. Здоровье и красота
Поиск по сайту

Условные операторы php if, switch и тернарный оператор. Сравниваем переменную или выражение с различными значениями в 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 будет исполнена в виде функций, первая работает на уровне значений, вторая - на уровне правил, а третья вызывается с уровня конкретного класса или идентификатора.

На уроке будут рассмотрены условные операторы 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 ;

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

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

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

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

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

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

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

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

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

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

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

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

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

Замечание:

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

Замечание:

Заметьте, что конструкция switch/case использует неточное сравнение (==) .

Следующие два примера иллюстрируют два различных способа написать то же самое. Один использует серию операторов if и elseif, а другой — оператор switch:

Пример #1 Оператор switch

If ($i == 0) { echo "i равно 0"; } elseif ($i == 1) { echo "i равно 1"; } elseif ($i == 2) { echo "i равно 2"; } switch ($i) { case 0: echo "i равно 0"; break; case 1: echo "i равно 1"; break; case 2: echo "i равно 2"; break; }

Пример #2 Оператор switch допускает сравнение с типом string

Switch ($i) { case "яблоко": echo "i это яблоко"; break; case "шоколадка": echo "i это шоколадка"; break; case "пирог": echo "i это пирог"; break; }

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

Например:

Switch ($i) { case 0: echo "i равно 0"; case 1: echo "i равно 1"; case 2: echo "i равно 2"; }

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

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

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

Switch ($i) { case 0: case 1: case 2: echo "i меньше чем 3, но неотрицательно"; break; case 3: echo "i равно 3"; }

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

Например:

Switch ($i) { case 0: echo "i равно 0"; break; case 1: echo "i равно 1"; break; case 2: echo "i равно 2"; break; default: echo "i не равно 0, 1 или 2"; }

Возможен альтернативный синтаксис для управляющей структуры switch.

Switch ($i): case 0: echo "i равно 0"; break; case 1: echo "i равно 1"; break; case 2: echo "i равно 2"; break; default: echo "i не равно to 0, 1 или 2"; endswitch;

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

К примеру:

Switch($beer) { case "tuborg"; case "carlsberg"; case "heineken"; echo "Хороший выбор"; break; default; echo "Пожалуйста, сделайте новый выбор..."; break; }