else
Das Schlüsselwort "else" ist eine Kontrollstruktur in PHP, die zusammen mit "if" verwendet wird, um einen Codeblock auszuführen, wenn die Bedingung falsch ist.
Das PHP-Schlüsselwort else
else ist das Gegenstück zu PHPs if-Anweisung. Allein entscheidet if nur ob ein Codeblock ausgeführt wird; in Verbindung mit else lässt sich ein Fallback angeben, der läuft, wenn die if-Bedingung false ergibt. Zusammen drücken sie eine klare Verzweigung aus: „tue dies — andernfalls das."
Diese Seite behandelt die genaue Syntax, den Unterschied zwischen else, elseif und einer Kette von ifs, die alternative Doppelpunkt-Syntax für HTML-Templates sowie häufige Fehlerquellen (z. B. die Verwechslung von = und ==).
Syntax
Ein else-Block kann nur unmittelbar nach einem if (oder nach einem elseif) stehen. Er besitzt keine eigene Bedingung:
<?php
if (condition) {
// runs when condition is truthy
} else {
// runs when condition is falsy
}Genau einer der beiden Blöcke wird ausgeführt — niemals beide und niemals keiner. Der else-Zweig fängt alles ab, was die if-Bedingung nicht abgedeckt hat — man muss die Gegenbedingung also nicht explizit ausschreiben.
Ein einfaches Beispiel
<?php
$myNumber = 5;
if ($myNumber == 4) {
echo "Number is 4";
} else {
echo "Number is not 4";
}
// Output: Number is not 4Da $myNumber gleich 5 ist, ist die Bedingung $myNumber == 4 false, sodass die Kontrolle an den else-Block übergeben wird.
Was gilt als „falsy"?
Der else-Block wird ausgeführt, sobald die if-Bedingung falsy ist — nicht nur, wenn sie wörtlich false ist. PHP behandelt folgende Werte als falsy: false, 0, 0.0, "0", "" (leerer string), null und das leere array []. Alles andere gilt als truthy.
<?php
$cart = [];
if ($cart) {
echo "You have items in your cart.";
} else {
echo "Your cart is empty."; // an empty array is falsy
}
// Output: Your cart is empty.Das ist praktisch für „Ist überhaupt etwas vorhanden?"-Prüfungen, aber Vorsicht: "0" und 0 sind falsy, sodass ein Wert, der eigentlich relevant ist, in den else-Zweig rutschen kann. Wenn man einen exakten Test braucht, sollte man explizit vergleichen (if ($x === 0)) statt sich auf Truthiness zu verlassen.
else vs. elseif vs. separate ifs
Ein einfaches if/else hat nur zwei Ergebnisse. Wenn mehr als zwei benötigt werden, greift man besser auf elseif zurück, anstatt unabhängige if-Anweisungen zu stapeln:
<?php
$score = 72;
if ($score >= 90) {
echo "Grade: A";
} elseif ($score >= 70) {
echo "Grade: B";
} else {
echo "Grade: C or lower";
}
// Output: Grade: BDie Kette stoppt beim ersten passenden Zweig, daher ist die Reihenfolge wichtig — die spezifischsten oder höchsten Bedingungen kommen zuerst. Zwei separate if-Blöcke würden beide Bedingungen unabhängig auswerten und könnten zwei Noten ausgeben. Einen umfassenderen Vergleich bietet PHP if, else, elseif.
Alternative (Doppelpunkt-)Syntax
Wenn PHP und HTML in einem Template gemischt werden, kann der geschweifte-Klammer-Stil schwer lesbar sein. PHP bietet eine alternative Syntax, die { durch : ersetzt und den Block mit endif schließt:
<?php $loggedIn = true; ?>
<?php if ($loggedIn): ?>
<p>Welcome back!</p>
<?php else: ?>
<p>Please log in.</p>
<?php endif; ?>Beide Stile verhalten sich identisch; die Doppelpunkt-Form hält Templates schlicht übersichtlicher.
Verschachtelung
Ein if/else kann innerhalb eines anderen else-Zweigs stehen. Jedes else bindet sich immer an das nächste ungematchte if:
<?php
$age = 17;
$hasGuardian = true;
if ($age >= 18) {
echo "Admitted.";
} else {
if ($hasGuardian) {
echo "Admitted with a guardian.";
} else {
echo "Not admitted.";
}
}
// Output: Admitted with a guardian.Wenn man sich mehr als ein oder zwei Ebenen tief verschachtelt, ist elseif oder eine switch-Anweisung in der Regel besser lesbar.
Häufiger Fehler: = vs. ==
Ein typischer Bug ist das Schreiben von = (Zuweisung) anstelle von == (Vergleich). Die folgende Zeile weist $x den Wert 4 zu, und da 4 truthy ist, wird der if-Zweig immer ausgeführt — else ist dadurch nicht erreichbar:
<?php
$x = 1;
if ($x = 4) { // assignment, not comparison!
echo "Always runs";
} else {
echo "Never runs";
}
// Output: Always runsFür den losen Vergleich verwendet man ==, für den strikten (typgenauen) Vergleich ===. Die Seite zu Vergleichsoperatoren listet alle auf.
Ternary: eine Kurzform für einfache Fälle
Wenn beide Zweige lediglich einen Wert liefern, ist der Ternary-Operator ?: eine kompakte Alternative zu einem vollständigen if/else:
<?php
$age = 20;
$status = $age >= 18 ? "adult" : "minor";
echo $status;
// Output: adultDies empfiehlt sich für kurze Einzelwert-Entscheidungen — Logik mit mehreren Anweisungen bleibt als echtes if/else klarer.
Zusammenfassung
elsewird nur ausgeführt, wenn die vorherigeif- (oderelseif-)Bedingung falsy ist; genau ein Zweig wird ausgeführt.- „Falsy" umfasst
false,0,"",nullund[]— nicht nur das wörtlichefalse. - Für mehr als zwei Ergebnisse nutzt man
elseifund die Doppelpunkt-/endif-Syntax in HTML-Templates. - Auf
=vs.==achten und den Ternary-Operator?:verwenden, wenn nur ein Wert ausgewählt werden muss.