Логические операторы в PHP
http://belarusweb.net
Основы создания сайтов

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

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

Пример Название Результат
$a and $b Логическое И TRUE, если оба значения и $a, и $b равны TRUE.
$a or $b Логическое ИЛИ TRUE, если оба значения равны TRUE или хотя бы одно из значений $a или $b равно TRUE.
$a xor $b Исключающее ИЛИ TRUE, если одно из значений $a или $b равно TRUE, но не оба сразу.
! $a Логическое НЕ TRUE, если значение $a не равно TRUE.
$a && $b Логическое И TRUE, если оба значения и $a, и $b равны TRUE.
$a || $b Логическое ИЛИ TRUE, если оба значения равны TRUE или хотя бы одно из значений $a или $b равно TRUE.

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

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

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

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

<?php

//Теперь $a==true, т.к. операнды преобразуются к 
//логическому типу, поэтому 5 преобразовалось в true
$a=5||true;  
//Теперь $a==false, т.к. 0->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. Использование логических операторов

Быстрый переход к другим страницам