if (condition) { ... } führt seinen Block nur aus, wenn die Bedingung wahr ist. Füge elseif (other condition) { ... } für weitere Fälle und else { ... } für alles Übrige hinzu. PHP prüft die Bedingungen von oben und führt nur den ersten passenden Block aus.
Ändere $temperature und führe den Code erneut aus. Weil die Prüfungen von oben nach unten laufen, bleibt 24 bei der zweiten Bedingung stehen und erreicht >= 10 nie, obwohl auch das wahr ist. Ordne deine Bedingungen von der spezifischsten zur allgemeinsten.
elseif vs else if
Mit geschweiften Klammern machen elseif und else if dasselbe. else if ist technisch ein else, dessen Rumpf ein neues if ist, aber das Ergebnis ist identisch.
Der Unterschied zeigt sich nur bei der Doppelpunkt-Syntax, die in Templates verwendet wird (nächste Abschnitte). Dort macht else if den Code kaputt:
<?php $score = 72; ?>
<?php if ($score >= 90): ?>
<p>A</p>
<?php else if ($score >= 60): ?>
<p>Passed</p>
<?php endif; ?>
PHP Parse error: syntax error, unexpected token "if", expecting ":" in /home/index.php on line 4
Schreib elseif als ein Wort, dann begegnet dir dieser Fehler nie.
Mehrere Bedingungen mit && und ||
&& (und) braucht zwei wahre Seiten, || (oder) braucht mindestens eine, und ! kehrt eine Bedingung um. PHP hört mit der Auswertung auf, sobald die Antwort feststeht, also läuft in $user !== null && $user['active'] der zweite Teil nur, wenn es einen Nutzer gibt.
Wenn du && und || mischst, setze Klammern: && bindet stärker, und die Klammern machen die Absicht für den nächsten Leser klar. PHP kennt auch die Schlüsselwörter and und or, aber sie haben eine niedrigere Priorität als =, also setzt $ok = true and false; die Variable $ok auf true. Bleib bei && und ||.
Was in einem if als wahr zählt
Die Bedingung muss kein Boolean sein. PHP wandelt sie um, und eine Handvoll Werte zählt als falsch: false, 0, 0.0, "", "0", [] und null. Alles andere ist wahr, auch "false", " " und "0.0".
| $x | bool | empty |
|---|---|---|
| false | ||
| 0 | ||
| 0.0 | ||
| "" | ||
| "0" | ||
| null | ||
| [] | ||
| " " | ||
| "0.0" | ||
| "a" | ||
| [0] | ||
| 1 |
Deshalb ist if ($items) eine übliche Art zu sagen „das Array ist nicht leer“. Gefährlich ist die Zeile "0": Ein Formularfeld, in das jemand 0 getippt hat, ist ein nicht leerer String, und trotzdem behandelt if ($_POST['qty']) es als falsch. Vergleiche explizit (if ($qty !== '')), wenn null eine gültige Antwort ist. Dieselben Regeln entscheiden, was empty() liefert.
if else in HTML mit if: und endif;
Zwischen HTML-Tags verliert man die geschweiften Klammern leicht aus dem Blick. PHP hat eine alternative Syntax: einen Doppelpunkt nach der Bedingung, elseif ...: und else: für die anderen Zweige und endif; am Ende. Führe diesen Block aus und klicke dann im Tab Page auf die Punktzahlen: Jeder Link führt dasselbe Skript erneut aus, mit einem neuen $_GET['score'].
<?= $score ?> ist die Kurzform von <?php echo $score; ?>. Denselben Doppelpunkt-Stil gibt es für Schleifen (foreach: endforeach;, while: endwhile;), und die meisten PHP-Templates verwenden ihn.
if in einer Zeile und der ternäre Operator
Eine einzelne Anweisung darf ohne geschweifte Klammern auf die Bedingung folgen. Das funktioniert, aber die nächste Zeile, die du hinzufügst, steht dann nicht im if, deshalb verlangen viele Styleguides immer Klammern. Um einen von zwei Werten zu wählen, ist der ternäre Operator kürzer als ein vollständiges if/else.
Wenn viele exakte Werte mit einer Variable verglichen werden, liest sich ein match-Ausdruck besser als eine lange elseif-Kette.
Früh zurückkehren statt verschachteln
Tief verschachtelte if-Blöcke sind schwer zu verfolgen. Prüfe in einer Funktion zuerst die Fehlerfälle und kehre sofort mit return zurück. Die Hauptlogik steht dann am linken Rand.
Typischer Fehler: = statt == in einer Bedingung
Ein einzelnes = weist zu. if ($role = 'admin') speichert 'admin' in $role und testet dann diesen String, der wahr ist. Der Block läuft für jeden Nutzer, und $role ist jetzt auch noch falsch.
Verwende === für Vergleiche, außer du hast einen Grund, eine Typumwandlung zu wollen. Manche schreiben die Konstante zuerst (if ('admin' === $role)), damit ein fehlendes = zu einem Fehler wird statt zu einer stillen Zuweisung.
Häufig gestellte Fragen
Was ist der Unterschied zwischen elseif und else if in PHP?
Mit geschweiften Klammern verhalten sie sich gleich: else if ist ein else, dessen Rumpf ein weiteres if ist. Mit der Doppelpunkt-Syntax (if (...): ... endif;) funktioniert nur elseif, und else if ist ein Parse-Fehler. Wer überall elseif schreibt, umgeht den Unterschied.
Wie prüfe ich mehrere Bedingungen in einer PHP-if-Abfrage?
Verbinde sie mit && (alle müssen wahr sein) oder || (mindestens eine): if ($age >= 18 && $hasTicket) { ... }. Setze Klammern, wenn du beides mischst, zum Beispiel if ($isAdmin || ($isOwner && $isActive)).
Wie schreibe ich eine if-Abfrage in PHP in einer Zeile?
Eine einzelne Anweisung kann ohne geschweifte Klammern auf die Bedingung folgen: if ($debug) echo 'debug mode';. Um in einer Zeile zwischen zwei Werten zu wählen, verwendest du den ternären Operator: $label = $count === 1 ? 'item' : 'items';.
Wie verwende ich if else in HTML mit PHP?
Verwende die alternative Syntax, die sich zwischen HTML-Tags gut liest: <?php if ($loggedIn): ?> <p>Welcome back</p> <?php else: ?> <a href="/login">Log in</a> <?php endif; ?>.