PHP while loop bis die Bedingung false wird
PHP while wiederholt einen Block, solange die Bedingung true ergibt. Die Bedingung wird vor jeder Iteration geprüft, daher kann der Block komplett übersprungen werden, wenn sie anfangs false ist. Nutze while, wenn die Anzahl der Durchläufe von einer Laufzeitbedingung abhängt - etwa bei Retries, Stream-Lesen oder Paginierung - und nicht von einer festen Anzahl.
PHP while loop Beispiel (Retry-Zähler)
Ausgabe:
Die Ausgabe erscheint hier...
Ausgabe:
Versuch 1
Versuch 2
Versuch 3
Versuch 4
Fertig nach 4 Versuchen
So stoppt die Schleife
$versuch = 1initialisiert die Zähler-Variable, die das Schleifenende steuert.while ($versuch <= $maxVersuche)prüft die Bedingung vor jedem Durchlauf. Sobald$versuchgrößer als$maxVersucheist, endet die Schleife.- Im Schleifenblock erhöht
$versuch++den Zähler. Ohne dieses Update würde die Bedingung niefalse, und es entstünde eine Endlosschleife. - Nach dem Ende der Schleife läuft der Code nach der schließenden Klammer weiter.
$versuchbleibt im Scope und hat den Wert 5.
Häufige Fehler mit PHP while-Schleifen
Den Bedingungszustand nicht ändern
Falsch:
$i = 0;
while ($i < 3) {
echo "$i\n";
// $i++ fehlt - Endlosschleife
}
Richtig:
$i = 0;
while ($i < 3) {
echo "$i\n";
$i++;
}
= statt === in der Bedingung verwenden
Falsch:
$istBereit = false;
while ($istBereit = true) { // weist true zu (immer wahr)
break; // verhindert in dieser Demo eine Endlosschleife
}
Richtig:
$istBereit = false;
while ($istBereit === true) {
// ...
}
Ein Zuweisungsausdruck ergibt den zugewiesenen Wert. Dadurch kann die Bedingung dauerhaft wahr bleiben. Eine Zuweisung in der Bedingung ist nur sinnvoll, wenn bewusst ein Funktionsresultat abgefangen wird (zum Beispiel in Fetch-Schleifen).
PHP while vs do-while vs for
Nutze eine PHP do-while-Loop (do...while), wenn der Schleifenblock mindestens einmal laufen muss.
| Schleife | Bedingungsprüfung | Am besten für |
|---|---|---|
while | Vor jeder Iteration | Unbekannte Anzahl von Durchläufen, kann nullmal laufen |
do...while | Nach jeder Iteration | Muss mindestens einmal laufen (Eingabevalidierung, Menüs) |
for | Vor jeder Iteration | Bekannte Anzahl mit Initialisierung/Inkrement in einer Zeile |
foreach | N/A (iteriert Collection) | Arrays und Traversable-Objekte |
Nutze while für bedingungsgesteuerte Workflows. Wechsle zu for, wenn die Schleife einen festen Bereich hat, und zu foreach, wenn du ein Array oder Iterable durchläufst.
Was ist eine PHP while-Schleife?
Eine PHP-while-Schleife ist eine eintrittsgesteuerte Schleife, die vor jeder Iteration einen booleschen Ausdruck auswertet. Ist der Ausdruck true, wird der Block ausgeführt; ist er false, springt die Ausführung hinter die schließende Klammer. PHP unterstützt auch die alternative Syntax while (condition): ... endwhile;, die in Template-Dateien mit vielen Klammern oft lesbarer ist.
Weitere Beispiele
Retry ausführen, bis eine Bedingung erfüllt ist, mit Sicherheitslimit:
$erfolg = false;
$versuche = 0;
while (!$erfolg && $versuche < 5) {
$versuche++;
$erfolg = ($versuche === 3); // simulierter Erfolg beim 3. Versuch
}
echo "Aufgelöst nach $versuche Versuchen";
Zwei Bedingungen zusammen verhindern unbeschränkte Retries. Begrenze Retry-Schleifen immer mit einem Maximum, um bei transienten Fehlern kein Denial-of-Service-Verhalten zu erzeugen.
do...while verwenden, um mindestens eine Ausführung zu garantieren:
$eingabe = '';
do {
$eingabe = 'gültig'; // simulierte Benutzereingabe
} while ($eingabe === '');
echo $eingabe;
do...while prüft die Bedingung erst nach dem ersten Durchlauf, daher läuft der Block immer mindestens einmal - nützlich für Prompts und Menüschleifen.
FAQ
Wie beendet man eine while-Schleife in PHP?
Nutze break, um die Schleife sofort zu verlassen, oder ändere die Bedingungsvariable so, dass der Test false wird. break 2 beendet zwei Verschachtelungsebenen auf einmal. Verlasse dich für die normale Terminierung nicht nur auf break - aktualisiere die Bedingung, damit die Absicht der Schleife klar bleibt.
Läuft eine PHP while-Schleife, wenn die Bedingung false ist?
Nein. while ist eine eintrittsgesteuerte Schleife: Wenn die Bedingung beim ersten Check false ist, wird der Block nie ausgeführt. Nutze do...while, wenn der Block unabhängig vom Anfangszustand mindestens einmal laufen muss. Dieser Unterschied ist wichtig, wenn null Durchläufe ein gültiges Ergebnis sind (leere Resultate, fehlgeschlagene Reads oder null Versuche).
Kann man in PHP mit while durch Arrays iterieren?
Ja, aber vermeide each() (in PHP 8 entfernt). Für Arrays ist foreach die idiomatische Wahl. Wenn du trotzdem while brauchst, führe einen Index und inkrementiere ihn, oder nutze current()/next(), wenn du bewusst mit Zeigersemantik arbeiten willst.