Comprendre les boucles PHP avec l'instruction do-while
Les boucles PHP sont essentielles à maîtriser. La boucle do-while garantit une exécution minimale d'une itération, quelle que soit la condition.
Les boucles vous permettent d'exécuter le même bloc de code plusieurs fois sans l'écrire manuellement. PHP dispose de quatre constructions de boucle — for, while, do-while et foreach — et la boucle do-while est celle que vous utilisez lorsque le corps doit s'exécuter au moins une fois, quelle que soit la condition.
C'est ce qui distingue do-while d'une boucle while classique : une boucle while vérifie sa condition avant la première itération, donc le corps peut ne jamais s'exécuter. Une boucle do-while vérifie la condition après chaque itération, donc le corps s'exécute toujours une fois, puis se répète tant que la condition reste vraie.
Ce chapitre couvre la syntaxe, la différence entre do-while et while, un cas d'utilisation concret classique (validation de saisie), le comportement de break et continue à l'intérieur, et le piège courant du décalage d'un.
Syntaxe
do {
// code to be executed each iteration
} while (condition);Le corps se trouve dans le bloc do { ... }, et la condition est testée après l'exécution du corps. Notez le point-virgule après while (condition) — il est obligatoire ici (contrairement à une boucle while classique) et l'oublier est une erreur de syntaxe fréquente.
Le flux est le suivant : exécuter le corps une fois → évaluer la condition → si elle est vraie, exécuter à nouveau le corps → répéter → s'arrêter dès que la condition est fausse.
Premier exemple
Ceci affiche les nombres de 1 à 10 :
Le corps s'exécute, affiche $i, l'incrémente, puis la condition $i <= 10 est vérifiée. Une fois que $i atteint 11, la condition est fausse et la boucle se termine, donc les chiffres de 1 à 10 sont affichés.
do-while vs. while : la différence fondamentale
Le corps d'une boucle do-while s'exécute toujours au moins une fois, même si la condition est fausse dès le départ. Une boucle while, en revanche, peut s'exécuter zéro fois. Comparaison :
<?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 ranMême si 100 < 10 est faux dans les deux cas, le corps du do-while a tout de même affiché une fois. Utilisez do-while chaque fois que la logique "exécuter d'abord, puis décider de répéter" correspond à ce que vous souhaitez.
Cas concret : validation de saisie
Le comportement "exécuter au moins une fois" est idéal pour demander une saisie à un utilisateur (ou réessayer une opération) jusqu'à ce que le résultat soit acceptable — il faut toujours au moins une tentative avant d'avoir quelque chose à valider :
<?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 grantedLa boucle continue jusqu'à ce que le bon code PIN soit saisi ou que la limite de tentatives soit atteinte — et elle n'a jamais besoin d'une "première tentative" séparée avant la boucle.
break et continue
break quitte la boucle immédiatement, et continue saute vers la vérification de la condition (l'itération suivante) :
<?php
$i = 0;
do {
$i++;
if ($i === 3) {
continue; // skip printing 3
}
if ($i > 5) {
break; // stop entirely
}
echo $i;
} while (true);
// Output: 12453 est ignoré par continue, et break arrête la boucle après 5, donc 1, 2, 4, 5 sont affichés.
Piège courant : le décalage d'un
Parce que do-while s'exécute avant de vérifier, une condition "vide" produit quand même une itération. Si vous traitez une collection qui pourrait être vide, préférez foreach ou while — un do-while traiterait d'abord un élément inexistant :
<?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 0Utilisez do-while uniquement lorsque "au moins une fois" correspond vraiment à ce que vous souhaitez.
Organigramme
graph LR
A[Start] --> B[Execute code block]
B --> C[Check condition]
C --> D{Is condition true?}
D --Yes--> B
D --No--> E[End]Chapitres associés
- Boucle while PHP — vérifie d'abord la condition ; le corps peut s'exécuter zéro fois.
- Boucle for PHP — idéale lorsque vous connaissez le nombre d'itérations à l'avance.
- Boucle foreach PHP — la manière idiomatique d'itérer sur des tableaux.
- PHP break / continue — contrôle du flux des boucles.