Entendendo os Laços PHP com a Instrução do-while
Aprenda como o laço do-while em PHP funciona, sua sintaxe, diferenças em relação ao while e casos de uso práticos como validação de entrada.
Os laços permitem executar o mesmo bloco de código várias vezes sem precisar escrevê-lo manualmente. PHP possui quatro construções de laço — for, while, do-while e foreach — e o laço do-while é o que você usa quando o corpo deve ser executado pelo menos uma vez, independentemente do que a condição diga.
É isso que diferencia o do-while de um laço while comum: um laço while verifica sua condição antes da primeira iteração, portanto o corpo pode nunca ser executado. Um laço do-while verifica a condição após cada iteração, portanto o corpo sempre executa uma vez e então se repete enquanto a condição permanecer verdadeira.
Este capítulo abrange a sintaxe, como o do-while difere do while, um caso de uso clássico do mundo real (validação de entrada), como break e continue se comportam dentro dele, e o erro comum de deslocamento por um.
Sintaxe
do {
// code to be executed each iteration
} while (condition);O corpo fica dentro do bloco do { ... }, e a condition é testada após a execução do corpo. Observe o ponto e vírgula após while (condition) — ele é obrigatório aqui (ao contrário de um laço while comum) e esquecê-lo é um erro de sintaxe frequente.
O fluxo é: executar o corpo uma vez → avaliar a condição → se for verdadeira, executar o corpo novamente → repetir → parar na primeira vez que a condição for falsa.
Um primeiro exemplo
Isso imprime os números de 1 a 10:
O corpo é executado, imprime $i, incrementa-o, e então a condição $i <= 10 é verificada. Quando $i chega a 11, a condição é falsa e o laço termina, assim os dígitos de 1 a 10 são impressos.
do-while vs. while: a diferença principal
O corpo de um laço do-while sempre é executado pelo menos uma vez, mesmo quando a condição é falsa desde o início. Um laço while, em contraste, pode executar zero vezes. Compare:
<?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 ranMesmo que 100 < 10 seja falso nos dois casos, o corpo do do-while ainda foi impresso uma vez. Use do-while sempre que "execute isso, depois decida se repete" corresponder à sua lógica.
Uso no mundo real: validando entrada
O comportamento de "executar pelo menos uma vez" é perfeito para solicitar algo a um usuário (ou repetir uma operação) até que o resultado seja aceitável — você sempre precisa de pelo menos uma tentativa antes de ter algo a validar:
<?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 grantedO laço continua até que o PIN correto seja inserido ou o limite de tentativas seja atingido — e nunca precisa de uma "primeira tentativa" separada antes do laço.
break e continue
break sai do laço imediatamente, e continue pula para a verificação da condição (a próxima iteração):
<?php
$i = 0;
do {
$i++;
if ($i === 3) {
continue; // skip printing 3
}
if ($i > 5) {
break; // stop entirely
}
echo $i;
} while (true);
// Output: 1245O 3 é ignorado pelo continue, e o break para o laço após o 5, portanto 1, 2, 4, 5 são impressos.
Erro comum: a armadilha do deslocamento por um
Como o do-while executa antes de verificar, uma condição "vazia" ainda produz uma iteração. Se você processar uma coleção que pode estar vazia, prefira foreach ou while — um do-while processaria um elemento inexistente primeiro:
<?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 0Use do-while apenas quando "pelo menos uma vez" for genuinamente o que você deseja.
Fluxograma
graph LR
A[Start] --> B[Execute code block]
B --> C[Check condition]
C --> D{Is condition true?}
D --Yes--> B
D --No--> E[End]Capítulos relacionados
- PHP while Loop — verifica a condição primeiro; o corpo pode executar zero vezes.
- PHP for Loop — melhor quando você sabe o número de iterações com antecedência.
- PHP foreach Loop — a forma idiomática de iterar arrays.
- PHP break / continue — controlando o fluxo do laço.