or
Das Schlüsselwort "or" in PHP erstellt logische Disjunktionen zwischen Ausdrücken. Erfahren Sie Syntax, Priorität und Verwendung des Operators.
Das PHP-Schlüsselwort „or"
Das Schlüsselwort or ist ein logischer Operator in PHP: Es verknüpft zwei boolesche Ausdrücke und gibt true zurück, wenn mindestens einer davon wahr ist. Es ist das Wort-Äquivalent des ||-Operators — beide liefern dasselbe logische Ergebnis, unterscheiden sich jedoch in der Operatorpriorität, was das Wichtigste ist, das man vor der Verwendung von or verstehen sollte.
Diese Seite behandelt die Syntax von or, wie die Priorität bei Zuweisungen Probleme verursacht, das Kurzschlussverhalten und wann or gegenüber || bevorzugt wird. Den inversen Operator finden Sie unter and; wie diese Bedingungen eingesetzt werden, zeigen if und if / else / elseif.
Syntax
if ($expression1 or $expression2) {
// runs when either expression is true
}PHP wertet zunächst $expression1 aus. Ist dieser bereits truthy, wird $expression2 nie ausgewertet (siehe Kurzschlussauswertung unten). Der Gesamtausdruck ist true, wenn mindestens ein Operand truthy ist, und nur dann false, wenn beide falsy sind.
$a | $b | $a or $b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
or vs. || — die Prioritätsfalle
or und || bedeuten logisch dasselbe, aber or hat eine sehr niedrige Priorität — niedriger als der Zuweisungsoperator =. Das ändert die Interpretation dieser Zeile:
<?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)Bei or findet die Zuweisung statt, bevor das or überhaupt berücksichtigt wird, sodass $a den Wert false erhält. Bei || wird zuerst der Vergleich ausgeführt. Faustregel: || in Zuweisungen und Ausdrücken verwenden; or dem unten gezeigten Kontrollfluss-Idiom vorbehalten.
Kurzschlussauswertung
Wie || wertet der or-Operator kurz aus: Wenn der linke Operand truthy ist, wertet PHP den rechten Operand überhaupt nicht aus. Damit lassen sich teure Funktionsaufrufe überspringen — und das ist die Grundlage für das or die()-Wächter-Muster.
<?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)Wann or verwendet werden sollte
Aufgrund seiner niedrigen Priorität eignet sich or hervorragend für ein „Tu dies, oder behandle den Fehler"-Wächter-Muster, bei dem die Zuweisung/Anweisung links zuerst gebunden werden soll:
<?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");Beispiele
Schauen wir uns einige praktische Beispiele an, wie das Schlüsselwort „or" verwendet werden kann:
Beispiele für PHP or
In diesen Beispielen wertet or die Bedingungen von links nach rechts aus und stoppt, sobald eine true ist. Wenn keine zutrifft, wird der Codeblock übersprungen.
Vorteile und Abwägungen
- Lesbarkeit: Bedingungen in natürlicher Sprache auszuschreiben (
if ($a or $b)) kann für Einsteiger lesbarer wirken als||. - Wächter-Klausel-Idiom: Die niedrige Priorität macht das
expr or die(...)/expr or handle()-Muster kompakt. - Vorsicht: Dieselbe niedrige Priorität macht
orin Zuweisungen gefährlich. Im Zweifel||verwenden.
Einen vollständigen Überblick darüber, wie or unter den logischen und anderen Operatoren in PHP eingeordnet ist, finden Sie unter PHP Operators. Der komplementäre Operator, der beide Bedingungen erfordert, ist and.
Fazit
Das Schlüsselwort or verknüpft Bedingungen und gibt true zurück, wenn eine davon truthy ist. Es verhält sich logisch wie ||, hat aber eine niedrigere Priorität als =, sodass es nach der Zuweisung bindet — || in Ausdrücken verwenden und or für wächterartige Anweisungen reservieren. Zusammen mit der Kurzschlussauswertung ermöglicht das Verständnis dieser Prioritätsregel sichereres und klareres PHP.