W3docs

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 :

php— editable, runs on the server

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 ran

Mê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 granted

La 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: 1245

3 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 0

Utilisez 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

Pratique

Pratique
Quel est le comportement et la fonctionnalité de la boucle 'do-while' en PHP ?
Quel est le comportement et la fonctionnalité de la boucle 'do-while' en PHP ?
Was this page helpful?