xor
Le mot-clé xor en PHP est un opérateur logique qui retourne TRUE si exactement l'une des deux expressions est TRUE et l'autre est FALSE.
Introduction
Le mot-clé xor en PHP est l'opérateur logique OU exclusif. Il retourne TRUE uniquement lorsque exactement l'un de ses deux opérandes est TRUE et l'autre est FALSE. Si les deux opérandes sont TRUE, ou si les deux sont FALSE, alors xor retourne FALSE. C'est la différence essentielle par rapport à l'opérateur or, qui retourne TRUE chaque fois que l'un ou les deux opérandes sont TRUE.
En termes simples : xor répond à la question « l'un de ces éléments est-il vrai, mais pas les deux ? »
Cette page couvre la table de vérité de xor, un exemple exécutable, sa précédence (et le piège courant qu'elle crée avec l'affectation), et les situations où l'utilisation de xor est véritablement pertinente.
Table de vérité
Le comportement de xor est entièrement décrit par ces quatre cas :
$a | $b | $a xor $b |
|---|---|---|
TRUE | TRUE | FALSE |
TRUE | FALSE | TRUE |
FALSE | TRUE | TRUE |
FALSE | FALSE | FALSE |
Remarquez que le résultat est TRUE uniquement sur les deux lignes « mixtes » — c'est ce qui le rend exclusif.
Exemple
Voici un exemple illustrant l'utilisation de xor en PHP :
Exemple du mot-clé PHP xor
Dans l'exemple ci-dessus, l'instruction if sera évaluée à TRUE car $x > 0 est TRUE et $y > 10 est FALSE. Par conséquent, le résultat du code sera : "One of the expressions is true and the other is false".
Il convient de noter que xor a une précédence inférieure à celle des opérateurs and et or, il est donc important d'utiliser des parenthèses pour regrouper correctement les expressions si nécessaire.
Précédence et le piège de l'affectation
Les opérateurs textuels and, or et xor ont tous une précédence inférieure à celle de l'opérateur d'affectation (=). Cela piège souvent les développeurs : dans $result = true xor false, l'affectation se lie en premier, donc PHP l'évalue comme ($result = true) xor false. Le xor est appliqué après que la valeur a déjà été affectée, et son résultat est ignoré.
<?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 règle générale : lorsque vous souhaitez stocker le résultat d'une expression xor dans une variable, encadrez l'expression avec des parenthèses. Si vous utilisez xor uniquement dans une condition if (comme dans l'exemple ci-dessus), le problème ne se pose pas.
Pour la table de précédence complète et les opérateurs symboliques (&&, ||, !), consultez PHP Operators.
Plus d'informations
Voici quelques informations supplémentaires sur l'opérateur xor en PHP :
- L'opérateur
xorest également appelé opérateur « OU exclusif » car il retourneTRUEuniquement si l'une des expressions estTRUEet l'autre estFALSE, mais pas si les deux sontTRUEou les deux sontFALSE. - L'opérateur
xorconvertit automatiquement ses opérandes en valeurs boolean avant l'évaluation, selon les règles standard de transtypage de PHP. - L'opérateur
xorpeut être utile dans les situations où vous devez vérifier qu'une seule de deux conditions est vraie, mais pas les deux. Par exemple, si vous avez deux cases à cocher dans un formulaire et que vous souhaitez vous assurer que l'utilisateur n'en sélectionne qu'une seule, vous pouvez utiliserxorpour valider la saisie. - Contrairement à
andetor, l'opérateurxorne fait pas de court-circuit ; les deux opérandes sont toujours évalués, quelle que soit la valeur du premier opérande. - L'opérateur
xorpeut être combiné avec d'autres opérateurs tels que==ou!=pour créer des expressions plus complexes. Par exemple, vous pouvez utiliser($x == $y) xor ($a != $b)pour vérifier que soit$xest égal à$y, soit$aest différent de$b, mais pas les deux. De telles expressions sont le plus souvent placées dans une instructionif. - Notez que
xorest un opérateur logique. Pour les opérations XOR bit à bit (basculement de bits individuels d'un entier), utilisez l'opérateur^à la place. - Les opérateurs textuels associés sont
andetor. PHP fournit également les formes symboliques&&et||, qui ont une précédence plus élevée que leurs équivalents textuels. - Il convient de noter que l'opérateur
xorn'est pas couramment utilisé en programmation PHP, et vous constaterez peut-être que vous pouvez obtenir les mêmes résultats avec d'autres opérateurs ou structures de contrôle. Cependant, il peut être un outil utile dans certaines situations où vous devez effectuer des opérations logiques sur des valeurs boolean.