Пример | Название | Результат |
---|---|---|
$a and $b | И | TRUE если и $a, и $b TRUE . |
$a or $b | Или | TRUE если или $a, или $b TRUE . |
$a xor $b | Исключающее или | TRUE если $a, или $b TRUE , но не оба. |
! $a | Отрицание | TRUE если $a не TRUE . |
$a && $b | И | TRUE если и $a, и $b TRUE . |
$a || $b | Или | TRUE если или $a, или $b TRUE . |
Смысл двух разных вариантов для операторов «and» и «or» в том, что они работают с различными приоритетами (смотрите таблицуПриоритет выполнения операторов).
Пример #1 Объяснение логических операторов
<?php // -------------------- // foo() никогда не будет вызвана, так как эти операторы являются шунтирующими (short-circuit) $a = (false && foo()); $b = (true || foo()); $c = (false and foo()); $d = (true or foo()); // -------------------- // "||" имеет больший приоритет, чем "or" // Результат выражения (false || true) присваивается переменной $e // Действует как: ($e = (false || true)) $e = false || true; // Константа false присваивается $f, а затем значение true игнорируется // Действует как: (($f = false) or true) $f = false or true; var_dump($e, $f); // -------------------- // "&&" имеет больший приоритет, чем "and" // Результат выражения (true && false) присваивается переменной $g // Действует как: ($g = (true && false)) $g = true && false; // Константа true присваивается $h, а затем значение false игнорируется // Действует как: (($h = true) and false) $h = true and false; var_dump($g, $h); ?>
Результатом выполнения данного примера будет что-то подобное:
bool(true) bool(false) bool(false) bool(true)