Условные операторы php if, switch и тернарный оператор. Логические операторы в PHP Выбор по умолчанию


Последнее обновление: 1.11.2015

В PHP мы можем использовать различные операторы: арифметические, логические и т.д. Рассмотрим каждый тип операций.

Арифметические операции

    + (операция сложения)

    Например, $a + 5

    - (операция вычитания)

    Например, $a - 5

    * (умножение)

    Например, $a * 5

    / (деление)

    Например, $a / 5

    % (получение остатка от деления)

    Например: $a=12; echo $a % 5; // равно 2

    ++ (инкремент/ увеличение значения на единицу)

    Например, ++$a

    Важно понимать разницу между выражениями ++$a и $a++ . Например:

    $a=12; $b=++$a; // $b равно 13 echo $b;

    Здесь сначала к значению переменной $a прибавляется единица, а затем ее значение приравнивается переменной $b. Иначе было бы, если бы выражение выглядело так: $b=$a++; . Здесь сначала значение переменной $a приравнивалось переменной $b, а затем происходило увеличение значения переменной $a.

    -- (декремент/ уменьшение значения на единицу)

    Например, --$a . И также, как и в случае с инкрементом, существуют два вида записи: --$a и $a--

Операции присваивания

    Приравнивает переменной определенное значение: $a = 5

    Сложение с последующим присвоением результата. Например: $a=12; $a += 5; echo $a; // равно 17

    Вычитание с последующим присвоением результата. Например: $a=12; $a -= 5; echo $a; // равно 7

    Умножение с последующим присвоением результата: $a=12; $a *= 5; echo $a; // равно 60

    Деление с последующим присвоением результата: $a=12; $a /= 5; echo $a; // равно 2.4

    Объединение строк с присвоением результата. Применяется к двум строкам. Если же переменные хранят не строки, а, к примеру, числа, то их значения преобразуются в строки и затем проводится операция: $a=12; $a .= 5; echo $a; // равно 125 // идентично $b="12"; $b .="5"; // равно 125

    Получение остатка от деления с последующим присвоением результата: $a=12; $a %= 5; echo $a; // равно 2

Операции сравнения

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

    Оператор равенства сравнивает два значения, и если они равны, возвращает true, иначе возвращает false: $a == 5

    Оператор тождественности также сравнивает два значения, и если они равны, возвращает true, иначе возвращает false: $a === 5

    Сравнивает два значения, и если они не равны, возвращает true, иначе возвращает false: $a != 5

    Сравнивает два значения, и если они не равны, возвращает true, иначе возвращает false: $a !== 5

    Сравнивает два значения, и если первое больше второго, то возвращает true, иначе возвращает false: $a > 5

    Сравнивает два значения, и если первое меньше второго, то возвращает true, иначе возвращает false: $a < 5

    Сравнивает два значения, и если первое больше или равно второму, то возвращает true, иначе возвращает false: $a >= 5

    Сравнивает два значения, и если первое меньше или равно второму, то возвращает true, иначе возвращает false: $a <= 5

Оператор равенства и тождественности

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

Очевидно, что переменные хранят разные значения разных типов. Но при сравнении они будут приводится к одному типу - числовому. И переменная $a будет приведена к числу 22. И в итоге обе переменных окажутся равны.

Или, например, следующие переменные также будут равны:

$a = false; $b = 0;

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

$a = "22a"; $b = 22; if($a===$b) echo "равны"; else echo "не равны";

Теперь переменные будут не равны.

Аналогично работают операторы неравенства!= и!== .

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

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

    Возвращает true, если обе операции сравнения возвращают true, иначе возвращает false: $a == 5 && $b = 6

    Аналогично операции && : $a == 5 and $b > 6

    Возвращает true, если хотя бы одна операция сравнения возвращают true, иначе возвращает false: $a == 5 || $b = 6

    Аналогично операции || : $a < 5 or $b > 6

    Возвращает true, если операция сравнения возвращает false: !($a >= 5)

    Возвращает true, если только одно из значений равно true. Если оба равны true или ни одно из них не равно true, возвращает false. Например: $a=12; $b=6; if($a xor $b) echo "true"; else echo "false";

    Здесь результат логической операции будет false , так как обе переменных имеют определенное значение. Изменим код:

    $a=12; $b=NULL; if($a xor $b) echo "true"; else echo "false";

    Здесь уже результат будет true , так как значение одной переменной не установлено. Если переменная имеет значение NULL, то в логических операциях ее значение будет рассматриваться как false

Битовые операции

Битовые операции производятся над отдельными битами числа. Числа рассматриваются в двоичном представлении, например, 2 в двоичном представлении 010, число 7 - 111.

    & (логическое умножение)

    Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1, то операция возвращает 1, иначе возвращается число 0. Например: $a1 = 4; //100 $b1 = 5; //101 echo $a1 & $b1; // равно 4

    Здесь число 4 в двоичной системе равно 100, а число 5 равно 101. Поразрядно умножим числа и получим (1*1, 0*0, 0 *1) = 100, то есть число 4 в десятичном формате.

    | (логическое сложение)

    Похоже на логическое умножение, операция также производится по двоичным разрядам, но теперь возвращается единица, если хотя бы у одного числа в данном разряде имеется единица. Например: $a1 = 4; //100 $b1 = 5; //101 echo $a1 | $b1; // равно 5

    ~ (логическое отрицание)

    инвертирует все разряды: если значение разряда равно 1, то оно становится равным нулю, и наоборот. $b = 5; echo ~$b;

    x<

    x>>y - сдвигает число x вправо на y разрядов. Например, 16>>1 сдвигает число 16 (которое в двоичном представлении 10000) на один разряд вправо, то есть в итоге получается 1000 или число 8 в десятичном представлении

Объединение строк

Для объединения строк используется оператор "точка". Например, соединим несколько строк:

$a="Привет, "; $b=" мир"; echo $a . $b . "!";

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

PHP поддерживает следующие стандартные логические операторы : "AND" и "&&" (логическое И), "OR" и "||" (логическое ИЛИ), "!" (логическое НЕ) и "XOR" (исключающее ИЛИ). Все они используются в логических выражениях для определения того или иного хода выполнения программы в зависимости от возвращаемого выражением результата и относятся к бинарным операторам, за исключением оператора "!" , который является унарным. При использовании логических операторов их операнды преобразуются к булевому типу данных (), а результат зависит от приведенных логических значений операндов и вида логического оператора (см. таблицу №1).

Таблица №1. Логические операторы

Разница между операторами "AND" и "&&" , а также "OR" и "||" заключается в том, что операторы "AND" , "OR" и "XOR" имеют более низкий приоритет, который даже ниже, чем у операторов присваивания (см. таблицу операторов PHP ).

Важно понимать, как интерпретатор обрабатывает логические выражения. Если в выражении с оператором "||" первый (левый) операнд будет иметь значение true или в выражении с оператором "&&" первый операнд будет иметь значение false , то второй (правый) операнд уже вычисляться не будет. Это связано с тем, что конечный результат в таких случаях уже не изменится (см. таблицу №1), а следовательно отпадает и необходимость тратить время на обработку кода второго операнда. Однако при этом нужно быть внимательным и не помещать в правый операнд код, от которого может зависеть правильная работа программы.

Использование логических операторов показано в примере №2.

false $a=0||false; //Теперь $a==true, т.к. 5->true и 8->true $a=5&&8; //Теперь $a==false, т.к. "0"->false $a="0"&&8; //Теперь $a==true $a=!false; //Теперь $a==false, т.к. 5->true $a=!5; /* Функция foo() не будет вызываться из-за шунтов */ $a=(false&&foo()); $b=(true||foo()); $c=(false and foo()); $d=(true or foo()); /* Отличие "||" от "or" и "&&" от "and" */ //Действует как ($a=(false||true)) $a=false||true; //Действует как (($a=false) or true) $a=false or true; //Действует как ($a=(false&&true)) $a=false&&true; //Действует как (($a=false) and true) $a=false and true; //Теперь $a==5, действует как (($a=5) xor 0) $a=5 xor 0; //Теперь $a==5, действует как (($a=5) and 0) $a=5 and 0; //Теперь $a==5, действует как (($a=5) or 0) $a=5 or 0; //Теперь $a==true, действует как ($a=(5||0)) $a=5||0; //Теперь $a==false, действует как ($a=(5&&0)) $a=5&&0; //Теперь $a==true, действует как ($a=(5 xor 6)) $a=(5 xor 6); ?>

Пример №2. Использование логических операторов

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

Для решения этой задачи существуют логические операторы:

= 5 && $price <= 10) echo "Это число находится между 5 и 10"; ?>

Оператор && , который ещё называется логическое И , приводит значения слева и справа к булеву типу, а затем и сам возвращает булево значение: true если слева и справа true , либо false если одно из условий false .

Другими словами, если и одно, и другое условие истинно, то и оператор && возвращает истину. Что и отражает название оператора.

Оператор || или логическое ИЛИ возвращает истину, когда истинно хотя бы одно из двух условий:

5 || 1 > 2) echo "Условие выполнено."; ?>

В коде выше команда echo будет выполнена, поскольку одно из условий истинно.

Все логические операторы в PHP

Между операторами && и and , а также между || и or есть небольшое различие - порядок выполнения.

Как вы знаете, умножение имеет больший приоритет, чем сложение. Так вот, операторы and и or имеют приоритет ниже, чем оператор присваивания = . Результат можно увидеть в следующем примере:

Странно, да? Поскольку у = приоритет выше, PHP воспримет код так:

($var = true) and false;

Т.е. сначала он присваивает переменной $var значение true , а затем происходит операция true and false , которая не имеет смысла, поскольку не влияет на значение переменной.

Ниже расположена таблица с приоритетами операторов. С некоторыми из них вы уже встречались. Чем выше оператор в таблице - тем выше его приоритет.

  • ++ -- ~ (int) (float) (string) (array) (object) (bool) @
  • * / %
  • + - .
  • < <= > >=
  • == != === !== <> <=>
  • ? : (тернарный оператор)
  • = += -= *= **= /= .= %= &= |= ^= <<= >>=

Теперь мы можем определить, что приоритет операторов сравнения (==, != и т.д.) выше, чем у логических операторов. Эта информация пригодится нам для выполнения задачи.

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

PHP поддерживает стандартные логические операторы AND и && , OR и || , ! (не) и XOR . Логические операторы позволяют сравнивать результаты работы двух операндов (значения или выражения) с целью определения факта возвращения одним из них или обоими значения true или false и выбора соответствующего продолжения выполнения сценария в зависимости от возвращенного значения. Как и операторы сравнения, логические операторы возвращают одно логическое значение - true либо false , в зависимости от значений находящихся по обе стороны от оператора.

Логическое ИЛИ (OR и ||)

Оператор логическое ИЛИ обозначается как OR или || . Он выполняет операцию «логическое ИЛИ» над двумя операндами. Если один или оба операнда имеют истинное значение, он возвращает true . Если оба операнда имеют ложные значения, он возвращает false . У вас вероятно возник вопрос, зачем же сделали два варианта одного оператора? Смысл двух разных вариантов оператора «логическое ИЛИ» в том, что они работают с различными приоритетами.

Сначала разберем как работает оператор || . И так, если один или оба его операнда имеют истинное значение, он возвращает true . Если оба операнда возвращают ложные значения, он вернет false .

Оператор OR работает также как и оператор || за одним исключением, если оператор OR используется с присваиванием, то сначала он вычислит и вернет значение левого операнда, в остальном он работает точно также как и оператор || , т.е. если один или оба его операнда имеют истинное значение, он возвращает true . Если оба операнда возвращают ложные значения, он вернёт false .

Чтобы стало понятнее, как они работают, приведем следующий пример:

1 // Сначала переменной присваивается значение false, а затем вычисляется второй операнд // Действие приоритета: ($var2 = false) or true $var2 = false or true; echo $var2; // false не выводится // ($var3 = 0) or 3 $var3 = 0 or 3; echo "
$var3"; // => 0 ?>

Любые операторы сравнения и логические можно комбинировать в более сложные конструкции:

Стоит упомянуть еще об одном важном моменте, касательно обоих операторов OR и || . Оператор «логическое ИЛИ» начинает свои вычисления со своего левого операнда, если он возвращает true , то правый операнд вычисляться не будет. Это позволяет экономить время исполнения, но нужно внимательно следить за тем, чтобы код, от которого может зависеть корректная работа программы, не был помещен в правый операнд.

Логическое И (AND и &&)

Оператор логическое И обозначается как AND или && . Он выполняет операцию «логическое И» над двумя операндами. Он возвращает true тогда и только тогда, когда оба операнда имеют значение true . Если один или оба операнда возвращают значение false , оператор возвращает false . Смысл двух разных вариантов записи оператора «логическое И» такой же как и у двух предыдущих операторов, а именно в том, что они работают с различными приоритетами.

Сначала разберем как работает оператор && . И так, если оба его операнда имеют истинное значение, он возвращает true . Если хотя бы один или оба его операнда возвращают значение false , он тоже вернет false .

Оператор AND работает также как и оператор && за одним исключением, если оператор AND используется с присваиванием, то сначала он вычислит и вернёт значение левого операнда, в остальном он работает точно также как и оператор && . Если хотя бы один из его операндов возвращает значение false , он тоже вернет false , также если оба операнда возвращают ложные значения, он возвращает false .

Для понимания рассмотрим теперь, как это работает на практике:

$bar3"; // => 9 ?>

Исключающее ИЛИ (XOR)

Оператор исключающее ИЛИ обозначается как XOR . Он возвращает значение true , если один и только один из операндов имеет значение true . Если оба операнда имеют значение true , оператор вернет значение false .

Так как приоритет оператора XOR такой же как и у операторов AND и OR (ниже чем у оператора присваивания), и он используется в выражении с присваиванием, то сначала он вычисляет и возвращает значение левого операнда.

6 $a1 = 19 xor 5 > 6; var_dump($a1); // => 19 var_dump(true xor true); // false var_dump((2 < 3) xor (5 != 5)); // true ?>

Логическое НЕ (!)

Оператор логическое НЕ , его также называют отрицание обозначается знаком! . Он является унарным оператором, помещаемым перед одиночным операндом. Оператор «логическое НЕ» используется для инверсии логического значения своего операнда и всегда возвращает true или false .

Если потребуется инвертировать значение выражения, например a && b , необходимо будет использовать круглые скобки: !(a && b) . Также с помощью оператора! можно преобразовать любое значение x в его логический эквивалент, дважды применив оператор: !!x .

Выбор редакции
После того как был приобретен Атол FPrint 22 подключение к 1С может сделать любой субъект предпринимательской деятельности...

Здравствуйте! С вами снова я, Алексей. Сегодня мы поговорим о том, как включить турбо режим в яндекс браузере, затронем тему ускорения...

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

После того, как вы получили ЭЦП в УЦ Squaretrade, есть необходимость установить сертификат локально на ваш компьютер. Способ установки...
Tasker Андроид "Контексты" определяют ситуацию, в которой совершается определенное действие. Это может быть время суток, местоположение,...
Общие характеристики Тип Определиться с типом устройства (телефон или смартфон?) довольно просто. Если нужен простой и недорогой аппарат...
Tutorial Будь я работником макаронной фабрики, то сейчас ломал бы голову над тем, куда девать этак 500 упаковок макарон по полкило...
В прошлой статье мы рассмотрели теоретические особенности и схему двух БП от ПК, с целью суммирования их мощности. Теперь пришло время...
С мая 2012 года все конрактники, проходящие военную службу в рядах российской армии, могут воспользоваться удобным и бесплатным сервисом,...