Логические операторы позволяют указывать сразу несколько условий для одного блока IF:
<?php
$price = 5;
if($price >= 5 && $price <= 10)
echo 'Это число находится между 5 и 10';
Оператор &&, который ещё называется логическое И, приводит значения слева и справа к булеву типу, а затем и сам возвращает булево значение: true если слева и справа true, либо false если одно из условий false.
Другими словами, если и одно, и другое условие истинно, то и оператор && возвращает истину. Что и отражает название оператора.
Оператор || или логическое ИЛИ возвращает истину когда истинно хотя бы одно из двух условий:
<?php
if(10 > 5 || 1 > 2)
echo 'Условие выполнено.';
?>
В коде выше команда echo будет выполнена, поскольку одно из условий истинно.
Все логические операторы в PHP
$a && $b | Истина, если $a и $b равны true. |
$a || $b | Истина, если хотя бы одна из $a и $b равна true. |
$a xor $b | Истина, если одна из $a и $b равна true, но не обе. |
!$a | Истина, если $a не равна true. |
$a and $b | Аналогично && |
$a or $b | Аналогично || |
Между операторами && и and, а также между || и or есть небольшое различие - порядок выполнения.
Как вы знаете, умножение имеет больший приоритет, чем сложение. Так вот, операторы and и or имеют приоритет ниже, чем оператор присваивания =. Результат можно увидеть в следующем примере:
<?php
$var = true && false;
var_dump($var); // Выведет false
$var = true and false;
var_dump($var); // Выведет... true!
Поскольку у = приоритет выше, PHP воспримет код так:
($var = true) and false;
Т.е. сначала он присваивает переменной $var значение true, а затем происходит операция true and false, которая не имеет смысла, поскольку не влияет на значение переменной.
Ниже расположена таблица с приоритетами операторов. С некоторыми из них вы уже встречались. Чем выше оператор в таблице - тем выше его приоритет.
- ++ -- ~ (int) (float) (string) (array) (object) (bool) @
- * / %
- + - .
- < <= > >=
- == != === !== <> <=>
- &&
- ||
- ? : (тернарный оператор)
- = += -= *= **= /= .= %= &= |= ^= <<= >>=
- and
- xor
- or
Теперь мы можем определить, что приоритет операторов сравнения (==, != и т.д.) выше, чем у логических операторов. Эта информация пригодится нам для выполнения задачи.
Задача
Каким будет результат выполнения следующего выражения?
<?php
$a = 100;
$result = $a >= 5 && $a < 10 || $a == 100;
<?php
$a = 100;
$result = $a >= 5 && $a < 10 || $a == 100;
// 1. Сначала подставляем значения
$result = 100 >= 5 && 100 < 10 || 100 == 100;
// 2. Затем выполняем операторы сравнения, получаем:
$result = true && false || true;
// 3. true && false возвращает false.
$result = false || true;
// 4. false || true возвращает true