W3docs

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

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

php— editable, runs on the server

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 or pericoloso 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.

Pratica

Pratica
In PHP, cosa fa l'operatore OR?
In PHP, cosa fa l'operatore OR?
Was this page helpful?