or
La parola chiave "or" in PHP crea disgiunzioni logiche tra espressioni. Esplora sintassi, precedenza degli operatori e comportamento di cortocircuito.
La parola chiave PHP "or"
La parola chiave or è un operatore logico in PHP: combina due espressioni booleane e restituisce true quando almeno una di esse è vera. È la forma letterale dell'operatore || — i due producono lo stesso risultato logico, ma differiscono nella precedenza degli operatori, che è la cosa più importante da capire prima di usare or.
Questa pagina tratta la sintassi di or, come la sua precedenza può sorprendere negli assegnamenti, il comportamento di cortocircuito e quando preferire or rispetto a ||. Per l'operatore inverso, vedi and; per mettere in pratica queste condizioni, vedi if e if / else / elseif.
Sintassi
if ($expression1 or $expression2) {
// runs when either expression is true
}PHP valuta prima $expression1. Se è già truthy, $expression2 non viene mai valutata (vedi Valutazione di cortocircuito di seguito). L'intera espressione è true se uno degli operandi è truthy, ed è false solo quando entrambi sono falsy.
$a | $b | $a or $b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
or vs. || — la trappola della precedenza
or e || hanno lo stesso significato logico, ma or ha una precedenza molto bassa — inferiore all'operatore di assegnamento =. Questo cambia il modo in cui viene interpretata questa riga:
<?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)Con or, l'assegnamento avviene prima che or venga anche solo considerato, quindi $a finisce per essere false. Con ||, il confronto avviene prima. Regola pratica: usa || negli assegnamenti e nelle espressioni; riserva or per l'idioma di controllo del flusso mostrato di seguito.
Valutazione di cortocircuito
Come ||, l'operatore or esegue il cortocircuito: se l'operando sinistro è truthy, PHP non valuta affatto l'operando destro. Questo consente di saltare chiamate a funzioni costose — ed è la base del pattern di guardia 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 usare or
A causa della sua bassa precedenza, or eccelle in un costrutto "fai questo, altrimenti gestisci il fallimento", dove si vuole che l'assegnamento/istruzione a sinistra abbia la precedenza:
<?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");Esempi
Vediamo alcuni esempi pratici di come la parola chiave "or" può essere utilizzata:
Esempi di or in PHP
In questi esempi, or valuta le condizioni da sinistra a destra e si ferma non appena una è true. Se nessuna corrisponde, il blocco di codice viene saltato.
Vantaggi e compromessi
- Leggibilità: Scrivere le condizioni in modo discorsivo (
if ($a or $b)) può risultare più naturale di||per i principianti. - Idioma della clausola di guardia: La sua bassa precedenza rende il pattern
expr or die(...)/expr or handle()conciso. - Attenzione: Quella stessa bassa precedenza rende
orpericoloso negli assegnamenti. In caso di dubbio, usa||.
Per un quadro completo di come or si colloca tra gli operatori logici e gli altri operatori di PHP, vedi Operatori PHP. L'operatore complementare che richiede entrambe le condizioni è and.
Conclusione
La parola chiave or combina condizioni e restituisce true quando almeno una è truthy. Si comporta come || logicamente ma ha una precedenza inferiore a =, quindi si lega dopo l'assegnamento — usa || nelle espressioni e riserva or per istruzioni di tipo guardia. Combinando il cortocircuito con la comprensione di questa regola di precedenza, puoi scrivere codice PHP più sicuro e chiaro.