W3docs

xor

La parola chiave xor in PHP è un operatore logico che restituisce TRUE se una delle due espressioni è TRUE e l'altra è FALSE.

Introduzione

La parola chiave xor in PHP è l'operatore logico OR esclusivo. Restituisce TRUE solo quando esattamente uno dei due operandi è TRUE e l'altro è FALSE. Se entrambi gli operandi sono TRUE, o entrambi sono FALSE, allora xor restituisce FALSE. Questa è la differenza fondamentale rispetto all'operatore or, che restituisce TRUE ogni volta che uno o entrambi gli operandi sono TRUE.

In parole semplici: xor risponde alla domanda "uno di questi è vero, ma non entrambi?"

Questa pagina tratta la tabella di verità di xor, un esempio eseguibile, la sua precedenza (e il classico errore di assegnazione che ne deriva) e quando ha effettivamente senso usare xor.

Tabella di verità

Il comportamento di xor è descritto completamente da questi quattro casi:

$a$b$a xor $b
TRUETRUEFALSE
TRUEFALSETRUE
FALSETRUETRUE
FALSEFALSEFALSE

Il risultato è TRUE solo nelle due righe "miste" — è questo che lo rende esclusivo.

Esempio

Ecco un esempio che dimostra l'uso di xor in PHP:

Esempio della parola chiave xor in PHP

php— editable, runs on the server

Nell'esempio precedente, l'istruzione if verrà valutata come TRUE perché $x > 0 è TRUE e $y > 10 è FALSE. Pertanto, l'output del codice sarà: "One of the expressions is true and the other is false".

Vale la pena notare che xor ha una precedenza inferiore rispetto agli operatori and e or, quindi è importante usare le parentesi per raggruppare correttamente le espressioni quando necessario.

Precedenza e l'errore di assegnazione

Gli operatori testuali and, or e xor hanno tutti una precedenza inferiore rispetto all'operatore di assegnazione (=). Questo trae in inganno: in $result = true xor false, l'assegnazione ha la precedenza, quindi PHP la valuta come ($result = true) xor false. xor viene applicato dopo che il valore è già stato assegnato e il suo risultato viene scartato.

<?php

// = binds tighter than xor, so this is ($result = true) xor false
$result = true xor false;
var_dump($result); // bool(true)  — the xor never affects $result

// Use parentheses to get the value you expect
$result = (true xor false);
var_dump($result); // bool(true)

$result = (true xor true);
var_dump($result); // bool(false)

La regola pratica è: quando si vuole memorizzare il risultato di un'espressione xor in una variabile, racchiudere l'espressione tra parentesi. Se si utilizza xor solo all'interno di una condizione if (come nell'esempio precedente), il problema non si presenta.

Per la tabella di precedenza completa e gli operatori simbolici (&&, ||, !), consultare PHP Operators.

Ulteriori informazioni

Ecco alcune informazioni aggiuntive sull'operatore xor in PHP:

  • L'operatore xor è chiamato anche operatore "OR esclusivo" perché restituisce TRUE solo se una delle espressioni è TRUE e l'altra è FALSE, ma non se entrambe sono TRUE o entrambe sono FALSE.
  • L'operatore xor converte automaticamente i suoi operandi in valori boolean prima della valutazione, seguendo le regole standard di type juggling di PHP.
  • L'operatore xor può essere utile nelle situazioni in cui è necessario verificare che solo una di due condizioni sia vera, ma non entrambe. Ad esempio, se si hanno due checkbox in un form e si vuole assicurarsi che l'utente ne selezioni solo una, è possibile usare xor per validare l'input.
  • A differenza di and e or, l'operatore xor non è short-circuit; entrambi gli operandi vengono sempre valutati indipendentemente dal valore del primo operando.
  • L'operatore xor può essere combinato con altri operatori come == o != per creare espressioni più complesse. Ad esempio, è possibile usare ($x == $y) xor ($a != $b) per verificare che $x sia uguale a $y oppure che $a non sia uguale a $b, ma non entrambe. Tali espressioni vengono solitamente inserite all'interno di un'istruzione if.
  • Si noti che xor è un operatore logico. Per le operazioni XOR bit a bit (che modificano i singoli bit di un intero), utilizzare invece l'operatore ^.
  • Gli operatori testuali correlati sono and e or. PHP fornisce anche le forme simboliche && e ||, che hanno una precedenza più alta rispetto alle loro controparti testuali.
  • Vale la pena notare che l'operatore xor non è comunemente usato nella programmazione PHP e si potrebbe scoprire che è possibile ottenere gli stessi risultati usando altri operatori o strutture di controllo. Tuttavia, può essere uno strumento utile in alcune situazioni in cui è necessario eseguire operazioni logiche su valori boolean.

Esercizio

Pratica
Qual è il significato dell'operatore logico XOR (OR esclusivo) in PHP?
Qual è il significato dell'operatore logico XOR (OR esclusivo) in PHP?
Was this page helpful?