Логические операторы выдают истинные или ложные результаты, поэтому их также называют булевыми операторами. Всего имеется четыре таких оператора (см. табл.).
Логический оператор | Описание |
---|---|
AND | Возвращает истинное значение (TRUE ), если оба операнда имеют истинные значения |
OR | Возвращает истинное значение (TRUE ), если любой из операндов имеет истинное значение |
XOR | Возвращает истинное значение (TRUE ), если один из двух операндов имеет истинное значение |
NOT | Возвращает истинное значение (TRUE ), если операнд имеет ложное значение, или ложное значение (FALSE ), если он имеет истинное значение |
Использование этих операторов показано в примере. Заметьте, что РНР требует использовать вместо слова NOT
символ !
. Кроме того, операторы могут быть составлены из букв нижнего или верхнего регистра.
Пример. Использование логических операторов
<?php
$a = 1; $b = 0;
echo ($a AND $b) . "<br />";
echo ($a or $b) . "<br />";
echo ($a XOR $b) . "<br />";
echo !$a . "<br />";
?>
Этот пример выводит на экран NULL, 1, 1, NULL
. Это значит, что только вторая и третья инструкции echo
получают в результате вычисления значение TRUE
. (Следует помнить, что NULL
, или ничто, отображает значение FALSE
.) Такой результат получается, потому что оператору AND
, чтобы вернуть значение TRUE
, нужно, чтобы оба операнда имели истинное значение, а четвертый оператор проводит над значением переменной $а
операцию NOT
, превращая его из TRUE
(значения, равного единице) в FALSE
. Если есть желание поэкспериментировать, запустите этот код, присваивая переменным $а
и $b
разные значения, выбранные из 1 и 0.
Занимаясь программированием, следует помнить, что у операторов AND
и OR
более низкий уровень приоритета, чем у других версий этих операторов — &&
и ||
. Поэтому в сложных выражениях более безопасным будет, наверное, применение операторов &&
и ||
.
При использовании в инструкции if
оператор OR
может стать причиной непредвиденных проблем, поскольку второй операнд не будет вычисляться, если в результате вычисления первого операнда уже получено значение TRUE
. В следующем примере функция getnext
никогда не будет вызвана, если переменная $finished
имеет значение 1.
Пример. Инструкция, использующая оператор OR
<?php
if ($finished == 1 OR getnext() == 1) exit;
?>
Если нужно, чтобы функция getnext
вызывалась для каждой инструкции if
, следует внести в код изменения, показанные в примере ниже.
Пример. Изменения в инструкции “if ... OR”, гарантирующие вызов функции getnext
<?php
$gn = getnext();
if ($finished == 1 OR $gn == 1) exit;
?>
В этом случае код в функции getnext
будет выполнен и возвращенное значение будет сохранено в переменной $gn
еще до выполнения инструкции if
.
В таблице показаны все допустимые варианты использования логических операторов. Следует заметить, что !TRUE
является эквивалентом FALSE
, а !FALSE
— эквивалентом TRUE
.
Входные | данные | Операторы и | результаты |
---|---|---|---|
а | b | AND | OR |
TRUE | TRUE | TRUE | TRUE |
TRUE | FALSE | FALSE | TRUE |
FALSE | TRUE | FALSE | TRUE |
FALSE | FALSE | FALSE | FALSE |
Операторы сравнения | Условия |