W3docs

or

A palavra-chave "or" em PHP cria disjunções lógicas entre expressões. Explore a sintaxe, precedência e uso do operador or neste artigo.

A Palavra-chave PHP "or"

A palavra-chave or é um operador lógico em PHP: combina duas expressões booleanas e retorna true quando pelo menos uma delas é verdadeira. É a forma textual do operador || — os dois produzem o mesmo resultado lógico, mas diferem na precedência de operadores, que é a coisa mais importante a entender antes de usar or.

Esta página aborda a sintaxe de or, como sua precedência causa problemas em atribuições, seu comportamento de curto-circuito e quando usar or em vez de ||. Para o operador inverso, veja and; para usar essas condições na prática, veja if e if / else / elseif.

Sintaxe

if ($expression1 or $expression2) {
  // runs when either expression is true
}

O PHP avalia $expression1 primeiro. Se já for verdadeiro, $expression2 nunca é avaliado (veja Avaliação de curto-circuito abaixo). A expressão completa é true se qualquer operando for verdadeiro, e false somente quando ambos forem falsos.

$a$b$a or $b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

or vs. || — a armadilha de precedência

or e || significam a mesma coisa logicamente, mas or tem precedência muito baixa — menor do que o operador de atribuição =. Isso muda como esta linha é interpretada:

<?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)

Com or, a atribuição ocorre antes de or ser considerado, então $a fica false. Com ||, a comparação ocorre primeiro. Regra geral: use || dentro de atribuições e expressões; reserve or para o idioma de fluxo de controle mostrado abaixo.

Avaliação de curto-circuito

Como ||, o operador or faz curto-circuito: se o operando esquerdo for verdadeiro, o PHP não avalia o operando direito. Isso permite ignorar chamadas de função custosas — e é a base do padrão de guarda 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)

Quando usar or

Por causa de sua baixa precedência, or brilha em uma guarda do tipo "faça isso, ou trate a falha", onde você quer que a atribuição/instrução à esquerda seja vinculada primeiro:

<?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");

Exemplos

Vejamos alguns exemplos práticos de como a palavra-chave "or" pode ser usada:

Exemplos de PHP or

php— editable, runs on the server

Nestes exemplos, or avalia as condições da esquerda para a direita e para assim que uma é true. Se nenhuma corresponder, o bloco de código é ignorado.

Benefícios e desvantagens

  • Legibilidade: Escrever condições em linguagem natural (if ($a or $b)) pode ser mais fácil de ler do que || para iniciantes.
  • Idioma de cláusula de guarda: Sua baixa precedência torna o padrão expr or die(...) / expr or handle() conciso.
  • Atenção: Essa mesma baixa precedência torna or perigoso em atribuições. Na dúvida, use ||.

Para uma visão completa de como or se posiciona entre os operadores lógicos e outros do PHP, veja Operadores PHP. O operador complementar que exige ambas as condições é and.

Conclusão

A palavra-chave or combina condições e retorna true quando qualquer uma delas é verdadeira. Ela se comporta como || logicamente, mas tem precedência menor do que =, portanto se vincula após a atribuição — use || dentro de expressões e reserve or para instruções no estilo de guarda. Combinado com a avaliação de curto-circuito, entender essa regra de precedência permite escrever PHP mais seguro e claro.

Prática

Prática
Em PHP, o que o operador OR faz?
Em PHP, o que o operador OR faz?
Was this page helpful?