PHP-Schleifen verstehen mit der do-while-Anweisung
Schleifen in PHP sind ein wesentliches Konzept. Die do-while-Schleife führt den Codeblock mindestens einmal aus, bevor die Bedingung geprüft wird.
Schleifen ermöglichen es, denselben Codeblock viele Male auszuführen, ohne ihn manuell zu wiederholen. PHP besitzt vier Schleifenkonstrukte — for, while, do-while und foreach — und die do-while-Schleife kommt immer dann zum Einsatz, wenn der Schleifenkörper mindestens einmal ausgeführt werden muss, unabhängig davon, was die Bedingung besagt.
Das unterscheidet do-while von einer gewöhnlichen while-Schleife: Eine while-Schleife prüft ihre Bedingung vor der ersten Iteration, sodass der Körper möglicherweise nie ausgeführt wird. Eine do-while-Schleife prüft die Bedingung nach jeder Iteration, sodass der Körper immer einmal ausgeführt wird und sich dann wiederholt, solange die Bedingung wahr bleibt.
Dieses Kapitel behandelt die Syntax, den Unterschied zwischen do-while und while, einen klassischen Praxisanwendungsfall (Eingabevalidierung), das Verhalten von break und continue innerhalb der Schleife sowie den häufigen Off-by-one-Fehler.
Syntax
do {
// code to be executed each iteration
} while (condition);Der Schleifenkörper befindet sich im do { ... }-Block, und die condition wird nach der Ausführung des Körpers geprüft. Beachten Sie das Semikolon nach while (condition) — es ist hier erforderlich (anders als bei einer regulären while-Schleife), und dessen Vergessen ist ein häufiger Syntaxfehler.
Der Ablauf ist: Körper einmal ausführen → Bedingung auswerten → wenn sie truthy ist, Körper erneut ausführen → wiederholen → stoppen, sobald die Bedingung falsy ist.
Ein erstes Beispiel
Dies gibt die Zahlen 1 bis 10 aus:
Der Körper wird ausgeführt, gibt $i aus, inkrementiert es, dann wird die Bedingung $i <= 10 geprüft. Sobald $i den Wert 11 erreicht, ist die Bedingung false und die Schleife endet, sodass die Ziffern 1 bis 10 ausgegeben werden.
do-while vs. while: der entscheidende Unterschied
Der Körper einer do-while-Schleife wird immer mindestens einmal ausgeführt, auch wenn die Bedingung von Anfang an false ist. Eine while-Schleife hingegen wird möglicherweise keinmal ausgeführt. Zum Vergleich:
<?php
// do-while: body runs once, THEN the condition is checked
$x = 100;
do {
echo "do-while ran\n";
} while ($x < 10);
// while: condition checked first, so the body never runs
$y = 100;
while ($y < 10) {
echo "while ran\n";
}
// Output:
// do-while ranObwohl 100 < 10 in beiden Fällen false ist, hat der do-while-Körper trotzdem einmal ausgegeben. Verwenden Sie do-while immer dann, wenn "erst ausführen, dann entscheiden ob wiederholen" Ihrer Logik entspricht.
Praxisbeispiel: Eingabevalidierung
Das Verhalten "mindestens einmal ausführen" ist ideal zum Auffordern eines Benutzers (oder zum Wiederholen einer Operation), bis das Ergebnis akzeptabel ist — Sie brauchen immer mindestens einen Versuch, bevor Sie etwas zu validieren haben:
<?php
$attempts = 0;
$pin = "";
do {
$attempts++;
// In real code this would read from input; we simulate the attempts:
$pin = ["123", "0000", "4821"][$attempts - 1];
echo "Attempt $attempts: tried '$pin'\n";
} while ($pin !== "4821" && $attempts < 3);
echo $pin === "4821" ? "Access granted\n" : "Locked out\n";
// Output:
// Attempt 1: tried '123'
// Attempt 2: tried '0000'
// Attempt 3: tried '4821'
// Access grantedDie Schleife läuft weiter, bis die richtige PIN eingegeben wurde oder das Versuchslimit erreicht ist — und benötigt keinen separaten "ersten Versuch" vor der Schleife.
break und continue
break beendet die Schleife sofort, und continue springt zur Bedingungsprüfung (zur nächsten Iteration):
<?php
$i = 0;
do {
$i++;
if ($i === 3) {
continue; // skip printing 3
}
if ($i > 5) {
break; // stop entirely
}
echo $i;
} while (true);
// Output: 12453 wird durch continue übersprungen, und break stoppt die Schleife nach 5, sodass 1, 2, 4, 5 ausgegeben werden.
Häufiger Fallstrick: der Off-by-one-Fehler
Da do-while vor der Prüfung ausgeführt wird, erzeugt eine "leere" Bedingung trotzdem eine Iteration. Wenn Sie eine Collection verarbeiten, die möglicherweise leer ist, bevorzugen Sie foreach oder while — eine do-while-Schleife würde zuerst ein nicht vorhandenes Element verarbeiten:
<?php
$items = []; // empty!
$index = 0;
do {
echo "Processing item $index\n"; // runs once even though there are no items
$index++;
} while ($index < count($items));
// Output: Processing item 0Greifen Sie auf do-while nur zurück, wenn "mindestens einmal" wirklich das ist, was Sie beabsichtigen.
Flussdiagramm
graph LR
A[Start] --> B[Execute code block]
B --> C[Check condition]
C --> D{Is condition true?}
D --Yes--> B
D --No--> E[End]Verwandte Kapitel
- PHP while-Schleife — prüft die Bedingung zuerst; der Körper kann null Mal ausgeführt werden.
- PHP for-Schleife — am besten geeignet, wenn die Anzahl der Iterationen im Voraus bekannt ist.
- PHP foreach-Schleife — der idiomatische Weg zur Iteration über Arrays.
- PHP break / continue — Steuerung des Schleifenflusses.