do
Das Schlüsselwort "do" in PHP startet eine do...while-Schleife, die einen Codeblock mindestens einmal ausführt. Syntax, Beispiele und häufige Fehler.
Das PHP-Schlüsselwort do
Das Schlüsselwort do startet eine do...while-Schleife in PHP — eine Kontrollstruktur, die einen Codeblock wiederholt ausführt, solange eine Bedingung wahr bleibt. Ihr besonderes Merkmal ist, dass die Bedingung am Ende der Schleife geprüft wird, sodass der Schleifenkörper immer mindestens einmal ausgeführt wird, selbst wenn die Bedingung von Anfang an falsch ist.
Diese Seite behandelt die Syntax von do...while, den Unterschied zu einer normalen while-Schleife, die typischen Anwendungsfälle (Eingabevalidierung, Menüs, Wiederholungslogik), häufige Fehler und die Steuerung der Schleife mit break und continue.
Syntax
Das Schlüsselwort do wird gemeinsam mit dem Schlüsselwort while verwendet. Der Schleifenkörper kommt zuerst, dann die Bedingung:
Die PHP-Syntax von do
<?php
do {
// code to be executed
} while (condition);Zwei wichtige Details:
- Die Bedingung wird nach jedem Durchlauf ausgewertet, sodass der Körper einmal ausgeführt wird, bevor sie überhaupt geprüft wird.
- Das abschließende
while (condition);muss mit einem Semikolon enden — anders als bei einer normalenwhile-Schleife, wo das Semikolon einen Fehler erzeugen würde.
do...while vs. while
Der Unterschied liegt darin, wann die Bedingung geprüft wird. Eine normale while-Schleife prüft die Bedingung vor dem ersten Durchlauf, sodass sie null Mal ausgeführt werden kann. Eine do...while-Schleife prüft danach, sodass sie mindestens einmal ausgeführt wird.
<?php
$count = 10;
// while: condition false up front → body never runs
while ($count < 5) {
echo "while: $count\n";
}
// do...while: body runs once before the check
do {
echo "do: $count\n"; // prints "do: 10"
} while ($count < 5);Ausgabe:
do: 10Die while-Schleife gibt nichts aus; die do...while-Schleife gibt eine Zeile aus. Verwenden Sie do...while immer dann, wenn der Körper mindestens einmal ausgeführt werden muss, unabhängig vom Ausgangszustand.
Beispiele
Zählen und Iterieren über ein array — beachten Sie, dass PHP_EOL (oder "\n") einen Zeilenumbruch ausgibt, sodass jeder Wert in einer eigenen Zeile erscheint:
Beispiele für PHP do
<?php
// Example 1 — count from 1 to 5
$myNumber = 1;
do {
echo $myNumber . PHP_EOL;
$myNumber++;
} while ($myNumber <= 5);
// Prints 1, 2, 3, 4, 5 each on its own line
// Example 2 — walk through an array
$myArray = ["apple", "banana", "cherry", "date"];
$index = 0;
do {
echo $myArray[$index] . PHP_EOL;
$index++;
} while ($index < count($myArray));
// Prints apple, banana, cherry, date each on its own lineWann do...while verwenden
Die Garantie „wird mindestens einmal ausgeführt" macht do...while zur natürlichen Wahl für bestimmte wiederkehrende Muster.
Wiederholungs- und Validierungslogik
Eine Aktion einmal versuchen und dann wiederholen, solange sie fehlschlägt:
<?php
$attempts = 0;
do {
$attempts++;
// Simulate: the 3rd attempt finally succeeds
$password = $attempts < 3 ? "wrong" : "secret";
} while ($password !== "secret" && $attempts < 5);
echo "Logged in after $attempts attempts" . PHP_EOL;
// Logged in after 3 attemptsDa der erste Versuch immer stattfinden sollte, ist do...while hier natürlicher zu lesen als eine while-Schleife mit doppeltem Initialisierungscode.
Menü-Schleifen
Ein Menü anzeigen, Eingaben lesen und wiederholen, bis der Benutzer beendet — das Menü muss mindestens einmal angezeigt werden:
<?php
$choice = '';
do {
// show menu, read $choice from input...
// for this example we just stop immediately
$choice = 'q';
} while ($choice !== 'q');
echo "Goodbye\n";Schleifensteuerung: break und continue
Innerhalb des do...while-Körpers kann break verwendet werden, um die Schleife vorzeitig zu verlassen, und continue, um zur nächsten Bedingungsprüfung zu springen.
<?php
$n = 0;
do {
$n++;
if ($n === 3) {
continue; // skip printing 3, jump to the while check
}
if ($n > 5) {
break; // exit the loop entirely
}
echo $n . PHP_EOL;
} while (true);
// Prints 1, 2, 4, 5Beachten Sie, dass continue zur Bedingungsprüfung springt, nicht zurück zum Anfang des Körpers — die Schleife wertet while (true) weiterhin aus und setzt fort.
Häufige Fallstricke
- Fehlendes abschließendes Semikolon nach
while (condition)verursacht einen Parse-Fehler. - Endlosschleifen: Wenn die Bedingung nie falsch wird (und kein
breakvorhanden ist), läuft die Schleife ewig. Stellen Sie sicher, dass etwas im Körper die Werte ändert, von denen die Bedingung abhängt. - Off-by-one beim Indizieren von Arrays: Bei
do...whilewird der Körper vor der Grenzprüfung ausgeführt, sodass ein leeres array einen „undefined offset"-Fehler auslösen kann. Sichern Sie sich mitif (!empty($arr))ab oder verwenden Sieforeachfür Arrays.
Verwandte Schleifen
PHP bietet mehrere Schleifenkonstrukte — wählen Sie dasjenige, das Ihrer Absicht entspricht:
while— prüft die Bedingung vor jedem Durchlauf (kann null Mal ausgeführt werden).for— eine zählergesteuerte Schleife mit eingebautem Init/Bedingung/Inkrement.foreach— iteriert direkt über Arrays und Objekte.- PHP-Schleifen-Übersicht — ein direkter Vergleich aller vier Schleifen.
Fazit
Die do...while-Schleife ist das richtige Werkzeug, wenn ein Codeblock mindestens einmal ausgeführt werden muss und dann wiederholt wird, solange eine Bedingung gilt — Eingabevalidierung, Wiederholungslogik und Menüabfragen sind klassische Beispiele. Denken Sie an das abschließende Semikolon, stellen Sie sicher, dass die Bedingung irgendwann falsch werden kann, und nutzen Sie break/continue, um den Ablauf fein abzustimmen.