Top-office11.ru

IT и мир ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Логические выражения php

Урок 5. Условный оператор if, логические операции и сравнение в PHP

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

Главное в действие данное оператора — это условие. if в переводе с английского значит если. Условие принимается в качестве аргумента (то что в скобках). В качестве условия может выступать логическое выражение или логическая переменная. Если проще, то смысл выражения будет такой:

Надеюсь логика условной операции понятна. Теперь давайте рассмотрим пример.

Демонстрация Скачать исходники
В итоге скрипт выведет 25 больше 5. Пример довольно прост. Надеюсь всё понятно. Теперь предлагаю рассмотреть ситуацию сложнее, где нужно соблюсти несколько условий. Каждое новое условие будет содержать после основного условия if() — вспомогательное, которое записывается как else if(). В конце как обычно будет else.

Задача: В школе проводят тестирование. Скрипту нужно высчитать балл, зная условия получения каждой оценки и сам балл школьника. Давайте посмотрим как это записать, и не забудьте прочитать комментарий.

Демонстрация Скачать исходники
Наш школьник, который успевает и отдохнуть, и написать нормально тест получает оценку 4! А принцип работы надеюсь понятен.

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

Вполне себе милый пример короткой записи условной операции. else писать не обязательно.

Дальше встаёт другой вопрос: а есть же, наверное, какие-либо другие операторы сравнения?

Операторы сравнения в PHP

Принцип работы условной операции понятен. Но, как Вы понимаете, способов сравнить намного больше. Давайте посмотрим ниже на таблицу с операторами сравнения.

Теперь рассмотрим операторы на примерах:

Логические операторы PHP

Бывают случаи, когда нужно сравнить не одну переменную, а сразу две и более в одном условии. Для этого существуют логические операторы.

Уже обратили внимание, что для операций и и или есть дополнительные операторы? Так сделано для того, чтобы расставить приоритеты в сложных операциях сравнения. В таблице логические операторы приведены в порядке приоритета: от меньшего к большему, то есть, например, || имеет больший приоритет, чем or.

Переходим к примерам

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

К вопросу тернарного кода я предлагаю Вам вернуться позже. Вовсе не упомянуть его я не мог, так как это важная конструкция, которая существенно сокращает размер кода. Предлагаю сразу рассмотреть код.

Суть кода: (условие) ? значение a если true : значение a если false

Таким образом, мы сокращаем запись оператора if. Однако, данная операция действительна только с присваиванием значений переменной. Теперь давайте рассмотрим готовый пример.

Прочитайте комментарии к коду и всё должно быть понятно.

PHP: Логические операторы

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

Логические операторы

ПримерНазваниеРезультат
$i and $yЛогическое ИTRUE, если оба операнда имеют значение TRUE.
$i or $yЛогическое ИЛИTRUE, если хотя бы один операнд имеет значение TRUE.
$i xor $yИсключающее илиTRUE, если только один из операндов имеет значение TRUE, но не оба.
!$iЛогическое НЕ (Отрицание)TRUE, если операнд имеет значение FALSE, и FALSE, если операнд имеет значение TRUE.
$i && $yЛогическое ИTRUE если и $i, и $y TRUE.
$i || $yЛогическое ИЛИTRUE если или $i, или $y TRUE.

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

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

Читать еще:  Заливка градиентом html

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Логические выражения php

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

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

Читать еще:  Международная система единиц си включает единицы

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

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

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

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

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

Приравнивает переменной определенное значение: $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. И в итоге обе переменных окажутся равны.

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

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

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

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

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

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

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

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

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

Аналогично операции || : $a 6

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

Возвращает true, если только одно из значений равно true. Если оба равны true или ни одно из них не равно true, возвращает false. Например:

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

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

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

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

Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1, то операция возвращает 1, иначе возвращается число 0. Например:

Читать еще:  Перевод html на русский

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

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

инвертирует все разряды: если значение разряда равно 1, то оно становится равным нулю, и наоборот.

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

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

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

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

Логические операторы

Мы уже умеем писать функции, которые проверяют одиночные условия. Теперь научимся строить составные условия.

Хороший пример: проверка пароля. Как вы знаете, некоторые сайты при регистрации хотят пароль от 8 до 20 символов в длину. Честно говоря, это странное ограничение, но что поделать.

В математике мы бы написали 8 , но в PHP такой трюк не пройдет (хотя есть языки, в которых пройдет).

Нам придётся сделать два отдельных логических выражения и соединить их специальным оператором «И»:

Пароль длиннее 8 символов И пароль короче 20 символов.

Вот функция, которая принимает пароль и говорит, соответствует ли он условиям ( true ) или не соответствует ( false ):

&& — означает «И» (в математической логике это называют конъюнкцией). Всё выражение считается истинным, только если истинен каждый операнд — каждое из составных выражений. Иными словами, && означает «и то, и другое».

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

Кроме && часто используется оператор || — «ИЛИ» (дизъюнкция). Он означает «или то, или другое, или оба».

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

Другой пример. Мы хотим купить квартиру, которая удовлетворяет условиям: площадь от 100 кв. метров и больше на любой улице ИЛИ площадь от 80 кв. метров и больше, но на центральной улице Main Street .

Напишем функцию, проверяющую квартиру. Она принимает два аргумента: площадь (число) и название улицы (строку):

Область математики, в которой изучаются логические операторы, называется булевой алгеброй. Ниже показаны «таблицы истинности» — по ним можно определить, каким будет результат применения оператора:

ABA && B
TRUETRUETRUE
TRUEFALSEFALSE
FALSETRUEFALSE
FALSEFALSEFALSE
ABA || B
TRUETRUETRUE
TRUEFALSETRUE
FALSETRUETRUE
FALSEFALSEFALSE

Задание

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

Если у солдата доспехи красного цвета И нет щита

ИЛИ

если у солдата есть щит с изображением льва

то это Ланнистер.

Напишите функцию isLannisterSoldier , которая принимает на вход два аргумента:

  1. Цвет доспехов (строка). Если доспехи красные, то строка red .
  2. null , если щита нет. Строка lion , если щит есть, и на нём изображен лев.

Функция возвращает true , если распознан Ланнистер, и false , если не распознан.

Советы

Определения

Логические операторы — операторы «И» (&&), ИЛИ (||), позволяющие создавать составные логические условия.

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