PHP while loop: execute até a condição falhar
O while do PHP repete um bloco enquanto sua condição for avaliada como true. A condição é verificada antes de cada iteração, então o corpo pode nunca executar se a condição já começar como false. Use while quando o número de iterações depender de uma condição em tempo de execução, como retentativas, leitura de stream ou paginação, e não de uma contagem fixa.
Exemplo de while loop em PHP (contador de tentativas)
Saída:
A saída aparecerá aqui...
Saída:
Tentativa 1
Tentativa 2
Tentativa 3
Tentativa 4
Concluído após 4 tentativas
Como o loop termina
$tentativa = 1inicializa a variável de contador que controla o término do loop.while ($tentativa <= $maxTentativas)verifica a condição antes de cada passagem. Quando$tentativaultrapassa$maxTentativas, o loop para.- Dentro do corpo,
$tentativa++avança o contador. Sem essa atualização, a condição nunca se tornariafalse, criando um loop infinito. - Depois que o loop termina, o código após a chave de fechamento executa com
$tentativaainda em escopo e igual a 5.
Erros comuns com while loops em PHP
Esquecer de alterar o estado da condição
Errado:
$i = 0;
while ($i < 3) {
echo "$i\n";
// $i++ está ausente — loop infinito
}
Certo:
$i = 0;
while ($i < 3) {
echo "$i\n";
$i++;
}
Usar = em vez de === na condição
Errado:
$estaPronto = false;
while ($estaPronto = true) { // atribui true (sempre truthy)
break; // evita um loop infinito nesta demonstração
}
Certo:
$estaPronto = false;
while ($estaPronto === true) {
// ...
}
Uma expressão de atribuição é avaliada como o valor atribuído, então a condição pode permanecer verdadeira para sempre. Atribuição em condição só é intencional quando você está capturando o resultado de uma função (por exemplo, loops de leitura).
while vs do-while vs for em PHP
Use um loop do while em PHP (do...while) quando o corpo precisar executar ao menos uma vez.
| Loop | Verificação da condição | Melhor para |
|---|---|---|
while | Antes de cada iteração | Contagem de iterações desconhecida, pode executar zero vezes |
do...while | Depois de cada iteração | Deve executar ao menos uma vez (validação de entrada, menus) |
for | Antes de cada iteração | Contagem conhecida com init/incremento em uma linha |
foreach | N/A (itera coleção) | Arrays e objetos Traversable |
Use while para fluxos guiados por condição. Troque para for quando o loop tiver intervalo fixo e para foreach ao iterar um array ou iterável.
O que é um while loop em PHP?
Um loop while em PHP é um loop com controle de entrada que avalia uma expressão booleana antes de cada iteração. Se a expressão for true, o corpo executa; se for false, o fluxo salta para depois da chave de fechamento. O PHP também suporta a sintaxe alternativa while (condição): ... endwhile;, comum em arquivos de template onde o pareamento de chaves pode ser menos legível.
Mais exemplos
Retry até uma condição ter sucesso com limite de segurança:
$sucesso = false;
$tentativas = 0;
while (!$sucesso && $tentativas < 5) {
$tentativas++;
$sucesso = ($tentativas === 3); // sucesso simulado na 3ª tentativa
}
echo "Resolvido após $tentativas tentativas";
Combinar duas condições evita retentativas sem limite. Sempre limite loops de retry com um máximo para evitar comportamento de negação de serviço em falhas transitórias.
Usando do...while para garantir uma execução:
$entrada = '';
do {
$entrada = 'válido'; // entrada de usuário simulada
} while ($entrada === '');
echo $entrada;
do...while verifica a condição após a primeira passagem, então o corpo sempre executa ao menos uma vez, útil para prompts e loops de menu.
FAQ
Como parar um while loop em PHP?
Use break para sair do loop imediatamente ou altere a variável da condição para que o teste se torne false. break 2 sai de dois níveis de aninhamento de uma vez. Evite depender apenas de break para término normal: atualize a condição para deixar clara a intenção do loop.
Um while loop em PHP executa se a condição for falsa?
Não. while é um loop com controle de entrada: se a condição for avaliada como false na primeira verificação, o corpo nunca executa. Use do...while quando o corpo precisar executar ao menos uma vez, independentemente do estado inicial. Essa diferença importa quando “zero iterações” é um resultado válido (resultados vazios, leituras com falha ou zero tentativas).
Dá para percorrer arrays com while em PHP?
Sim, mas evite each() (removido no PHP 8). Para arrays, foreach é a escolha idiomática. Se precisar de while, controle um índice e incremente-o, ou use current()/next() quando você realmente precisar de semântica de ponteiro.