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
. У вас вероятно возник вопрос, зачем же сделали два варианта одного оператора? Смысл двух разных вариантов оператора «логическое ИЛИ» в том, что они работают с различными приоритетами.
Сначала разберем как работает оператор ||
. И так, если один или оба его операнда имеют истинное значение, он возвращает true
. Если оба операнда возвращают ложные значения, он вернет false
.
Оператор OR
работает также как и оператор ||
за одним исключением, если оператор OR
используется с присваиванием, то сначала он вычислит и вернет значение левого операнда, в остальном он работает точно также как и оператор ||
, т.е. если один или оба его операнда имеют истинное значение, он возвращает true
. Если оба операнда возвращают ложные значения, он вернёт false
.
Чтобы стало понятнее, как они работают, приведем следующий пример:
<?php // Оператор "||" имеет больший приоритет, чем "or" // Результат выражения (false || true) будет присвоен переменной $var1 // Действие приоритета: $var1 = (false || true) $var1 = false || true; echo $var1; // => 1 // Сначала переменной присваивается значение false, а затем вычисляется второй операнд // Действие приоритета: ($var2 = false) or true $var2 = false or true; echo $var2; // false не выводится // ($var3 = 0) or 3 $var3 = 0 or 3; echo "<br>$var3"; // => 0 ?>
Любые операторы сравнения и логические можно комбинировать в более сложные конструкции:
<?php $a = (6 == 6) || (4 <= 9); // или так echo ('c' != 'd') or ('A' === 'A'); ?>
Стоит упомянуть еще об одном важном моменте, касательно обоих операторов OR
и ||
. Оператор «логическое ИЛИ» начинает свои вычисления со своего левого операнда, если он возвращает true
, то правый операнд вычисляться не будет. Это позволяет экономить время исполнения, но нужно внимательно следить за тем, чтобы код, от которого может зависеть корректная работа программы, не был помещен в правый операнд.
Логическое И (AND и &&)
Оператор логическое И обозначается как AND
или &&
. Он выполняет операцию «логическое И» над двумя операндами. Он возвращает true
тогда и только тогда, когда оба операнда имеют значение true
. Если один или оба операнда возвращают значение false
, оператор возвращает false
. Смысл двух разных вариантов записи оператора «логическое И» такой же как и у двух предыдущих операторов, а именно в том, что они работают с различными приоритетами.
Сначала разберем как работает оператор &&
. И так, если оба его операнда имеют истинное значение, он возвращает true
. Если хотя бы один или оба его операнда возвращают значение false
, он тоже вернет false
.
Оператор AND
работает также как и оператор &&
за одним исключением, если оператор AND
используется с присваиванием, то сначала он вычислит и вернёт значение левого операнда, в остальном он работает точно также как и оператор &&
. Если хотя бы один из его операндов возвращает значение false
, он тоже вернет false
, также если оба операнда возвращают ложные значения, он возвращает false
.
Для понимания рассмотрим теперь, как это работает на практике:
<?php // Оператор "&&" имеет больший приоритет, чем "and" // Результат выражения (true && false) будет присвоен переменной $bar1 // Действие приоритета: $bar1 = (true && false) $bar1 = true && false; // Сначала переменной присваивается значение true, а затем вычисляется второй операнд // Действие приоритета: ($bar2 = true) and false $bar2 = true and false; var_dump($bar1, $bar2); // ($bar3 = 9) and 3 $bar3 = 9 and 3; echo "<br>$bar3"; // => 9 ?>
Исключающее ИЛИ (XOR)
Оператор исключающее ИЛИ обозначается как XOR
. Он возвращает значение true
, если один и только один из операндов имеет значение true
. Если оба операнда имеют значение true
, оператор вернет значение false
.
Так как приоритет оператора XOR
такой же как и у операторов AND
и OR
(ниже чем у оператора присваивания), и он используется в выражении с присваиванием, то сначала он вычисляет и возвращает значение левого операнда.
<?php // ($a1 = 19) xor 5 > 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
.
<?php $a1 = 10; var_dump((11 == 11)); // true // оператора ! инвертирует значение var_dump(!(11 == 11)); // false // преобразует в логическое значение var_dump(!!$a1); // true ?>
С этой темой смотрят: