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 |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
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
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
orperigoso 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.