or
Ключевое слово "or" в PHP создаёт логическое «или» между двумя и более выражениями. Разбираем синтаксис, приоритет операторов и примеры применения.
Ключевое слово PHP "or"
Ключевое слово or — это логический оператор в PHP: он объединяет два булевых выражения и возвращает true, когда хотя бы одно из них истинно. По смыслу or — это словесный аналог оператора ||. Оба дают одинаковый логический результат, однако различаются по приоритету операторов — это самое важное, что нужно понять перед использованием or.
На этой странице рассматриваются синтаксис or, типичные ошибки, связанные с его приоритетом в присваиваниях, поведение при короткой схеме вычислений и случаи, когда стоит выбрать or вместо ||. Об обратном операторе читайте в and; о применении этих условий — в if и if / else / elseif.
Синтаксис
if ($expression1 or $expression2) {
// runs when either expression is true
}PHP сначала вычисляет $expression1. Если оно уже истинно, $expression2 не вычисляется вовсе (см. раздел Короткая схема вычислений ниже). Всё выражение равно true, если хотя бы один операнд истинен, и false только тогда, когда оба ложны.
$a | $b | $a or $b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
or vs. || — ловушка приоритетов
or и || логически означают одно и то же, но or имеет очень низкий приоритет — ниже, чем у оператора присваивания =. Это меняет способ разбора следующей строки:
<?php
$a = false or true; // parsed as: ($a = false) or true
var_dump($a); // bool(false) ← surprising!
$b = false || true; // parsed as: $b = (false || true)
var_dump($b); // bool(true)При использовании or присваивание происходит до того, как оператор or вступает в силу, поэтому $a оказывается равным false. С || сначала выполняется сравнение. Практическое правило: используйте || внутри присваиваний и выражений; оставьте or для идиомы управления потоком, показанной ниже.
Короткая схема вычислений
Как и ||, оператор or использует короткую схему вычислений: если левый операнд истинен, PHP не вычисляет правый операнд вовсе. Это позволяет пропускать дорогостоящие вызовы функций — и является основой шаблона-защиты or die().
<?php
function check() {
echo "check() ran\n";
return true;
}
if (true or check()) {
echo "matched\n";
}
// Output:
// matched
// (check() never ran, so "check() ran" is NOT printed)Когда использовать or
Благодаря низкому приоритету or хорошо подходит для шаблона «сделай это, или обработай ошибку», когда нужно, чтобы присваивание/оператор слева сработали первыми:
<?php
// Classic fallback idiom
$value = null;
$value or print("value was falsy\n"); // prints: value was falsy
// Common in legacy code (modern code prefers exceptions)
// $handle = fopen("data.txt", "r") or die("Cannot open file");Примеры
Рассмотрим несколько практических примеров использования ключевого слова "or":
Примеры PHP or
В этих примерах or проверяет условия слева направо и останавливается, как только одно из них оказывается true. Если ни одно не совпало, блок кода пропускается.
Преимущества и компромиссы
- Читаемость: Написание условий словами (
if ($a or $b)) может восприниматься новичками более естественно, чем||. - Идиома охранного условия: Низкий приоритет делает шаблон
expr or die(...)/expr or handle()лаконичным. - Осторожно: Тот же низкий приоритет делает
orопасным в присваиваниях. При сомнениях используйте||.
Полную картину того, как or соотносится с остальными логическими и другими операторами PHP, смотрите в PHP Operators. Дополняющий оператор, требующий истинности обоих условий, — and.
Заключение
Ключевое слово or объединяет условия и возвращает true, если хотя бы одно из них истинно. Логически оно ведёт себя как ||, но имеет более низкий приоритет, чем =, поэтому связывается после присваивания — используйте || внутри выражений, а or оставьте для охранных конструкций. В сочетании с короткой схемой вычислений понимание этого правила приоритетов позволяет писать более безопасный и понятный PHP.