or
Le mot-clé "or" en PHP crée des disjonctions logiques entre deux expressions ou plus. Découvrez sa syntaxe, sa priorité et ses cas d'utilisation.
Le mot-clé PHP "or"
Le mot-clé or est un opérateur logique en PHP : il combine deux expressions booléennes et renvoie true quand au moins une d'elles est vraie. C'est la variante littérale de l'opérateur || — les deux produisent le même résultat logique, mais ils diffèrent en termes de priorité des opérateurs, ce qui est la chose la plus importante à comprendre avant d'utiliser or.
Cette page couvre la syntaxe de or, la façon dont sa priorité peut surprendre dans les affectations, son comportement de court-circuit, et quand préférer or à ||. Pour l'opérateur inverse, voir and ; pour utiliser ces conditions, voir if et if / else / elseif.
Syntaxe
if ($expression1 or $expression2) {
// runs when either expression is true
}PHP évalue $expression1 en premier. Si elle est déjà vraie, $expression2 n'est jamais évaluée (voir Évaluation en court-circuit ci-dessous). L'expression entière vaut true si l'un ou l'autre des opérandes est vrai, et false uniquement lorsque les deux sont faux.
$a | $b | $a or $b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
or vs. || — le piège de la priorité
or et || signifient la même chose logiquement, mais or a une priorité très basse — inférieure à celle de l'opérateur d'affectation =. Cela change la façon dont cette ligne est analysée :
<?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)Avec or, l'affectation se produit avant que or soit pris en compte, donc $a vaut false. Avec ||, la comparaison s'effectue en premier. Règle pratique : utilisez || dans les affectations et les expressions ; réservez or à l'idiome de contrôle de flux présenté ci-dessous.
Évaluation en court-circuit
Comme ||, l'opérateur or effectue un court-circuit : si l'opérande gauche est vrai, PHP n'évalue pas du tout l'opérande droit. Cela permet d'éviter des appels de fonctions coûteux — et constitue la base du motif de garde 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)Quand utiliser or
En raison de sa faible priorité, or est particulièrement adapté à une garde "faire ceci, ou sinon gérer l'échec", où l'on veut que l'affectation/instruction à gauche soit liée en premier :
<?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");Exemples
Voici quelques exemples pratiques d'utilisation du mot-clé "or" :
Exemples de or en PHP
Dans ces exemples, or évalue les conditions de gauche à droite et s'arrête dès que l'une est true. Si aucune ne correspond, le bloc de code est ignoré.
Avantages et compromis
- Lisibilité : Écrire les conditions en toutes lettres (
if ($a or $b)) peut se lire plus naturellement que||pour les débutants. - Idiome de clause de garde : Sa faible priorité rend le motif
expr or die(...)/expr or handle()concis. - Attention : Cette même faible priorité rend
ordangereux dans les affectations. En cas de doute, utilisez||.
Pour une vue d'ensemble de la place de or parmi les opérateurs logiques et autres de PHP, voir PHP Operators. L'opérateur complémentaire qui exige que les deux conditions soient vraies est and.
Conclusion
Le mot-clé or combine des conditions et renvoie true quand l'une d'elles est vraie. Il se comporte comme || logiquement, mais a une priorité inférieure à =, donc il se lie après l'affectation — utilisez || dans les expressions et réservez or aux instructions de type garde. Combiné à l'évaluation en court-circuit, la compréhension de cette règle de priorité vous permet d'écrire un PHP plus sûr et plus clair.