W3docs

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
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

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

php— editable, runs on the server

В этих примерах or проверяет условия слева направо и останавливается, как только одно из них оказывается true. Если ни одно не совпало, блок кода пропускается.

Преимущества и компромиссы

  • Читаемость: Написание условий словами (if ($a or $b)) может восприниматься новичками более естественно, чем ||.
  • Идиома охранного условия: Низкий приоритет делает шаблон expr or die(...) / expr or handle() лаконичным.
  • Осторожно: Тот же низкий приоритет делает or опасным в присваиваниях. При сомнениях используйте ||.

Полную картину того, как or соотносится с остальными логическими и другими операторами PHP, смотрите в PHP Operators. Дополняющий оператор, требующий истинности обоих условий, — and.

Заключение

Ключевое слово or объединяет условия и возвращает true, если хотя бы одно из них истинно. Логически оно ведёт себя как ||, но имеет более низкий приоритет, чем =, поэтому связывается после присваивания — используйте || внутри выражений, а or оставьте для охранных конструкций. В сочетании с короткой схемой вычислений понимание этого правила приоритетов позволяет писать более безопасный и понятный PHP.

Практика

Практика
Что делает оператор OR в PHP?
Что делает оператор OR в PHP?
Was this page helpful?