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

?>
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011-2016 © puzzleweb.ru

Реклама на сайте | puzinfo@puzzleweb.ru