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

  1. $tentativa = 1 inicializa a variável de contador que controla o término do loop.
  2. while ($tentativa <= $maxTentativas) verifica a condição antes de cada passagem. Quando $tentativa ultrapassa $maxTentativas, o loop para.
  3. Dentro do corpo, $tentativa++ avança o contador. Sem essa atualização, a condição nunca se tornaria false, criando um loop infinito.
  4. Depois que o loop termina, o código após a chave de fechamento executa com $tentativa ainda 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.

LoopVerificação da condiçãoMelhor para
whileAntes de cada iteraçãoContagem de iterações desconhecida, pode executar zero vezes
do...whileDepois de cada iteraçãoDeve executar ao menos uma vez (validação de entrada, menus)
forAntes de cada iteraçãoContagem conhecida com init/incremento em uma linha
foreachN/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.