Menu

Laço while e do while no PHP: sintaxe e exemplos

while (condition) { ... } repete um bloco enquanto a condição for verdadeira, verificando-a antes de cada volta. do { ... } while (condition); verifica depois, então sempre roda pelo menos uma vez. Veja while (true) com break, como ler um arquivo linha por linha e como evitar loops infinitos.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

while (condition) { ... } executa o bloco de novo e de novo enquanto a condição for verdadeira. A condição é verificada antes de cada volta, então se ela for falsa desde o início, o corpo nunca roda. Algo dentro do loop precisa mudar a condição, ou ele nunca termina.

Esse é o tipo de pergunta para a qual o while foi feito: você não sabe o número de voltas de antemão, só quando parar. Mude a taxa de juros e rode de novo.

do while: rodar pelo menos uma vez

do { ... } while (condition); verifica a condição depois do corpo, então o corpo sempre roda uma vez. Repare no ponto e vírgula no fim.

Um uso típico é "tentar e depois verificar": jogar um dado até sair seis, gerar um código até encontrar um não usado. A primeira tentativa precisa acontecer antes de haver algo para verificar. Este dá um resultado diferente a cada execução:

while (true) com break

Quando a condição de saída é mais fácil de verificar no meio do corpo, escreva while (true) e saia com break. continue pula para a próxima verificação, como em qualquer loop.

array_shift() retorna null quando o array fica vazio, que é a outra saída. O mesmo loop poderia ser escrito como while ($queue), porque um array vazio conta como falso.

Ler um arquivo linha por linha

fgets() retorna uma linha por vez e false no fim do arquivo, então ele conduz um loop while diretamente. O bloco escreve o arquivo primeiro e depois o lê de volta.

Os parênteses em volta de $line = fgets($handle) importam: a atribuição acontece primeiro, depois o resultado é comparado com false. Usar !== false em vez de uma verificação simples de verdadeiro evita que uma última linha contendo só 0 (sem quebra de linha depois) encerre o loop antes da hora. A página sobre fopen() explica as funções de arquivo.

while com endwhile em templates

Como if e for, o while tem uma forma com dois pontos para HTML: while (...): e endwhile;. Este imprime uma lista de contagem regressiva na aba Page.

Erro comum: o loop que nunca termina

O contador precisa andar em direção à saída. Esqueça o $i++, ou altere a variável errada, e a condição continua verdadeira para sempre. Num servidor web, o PHP interrompe o script depois do max_execution_time (30 segundos por padrão) com um erro fatal. Na linha de comando ele nunca para.

// Never ends: $i is never changed
$i = 0;
while ($i < 3) {
    echo $i;
}

Um limite de segurança é uma proteção barata para loops que dependem de dados externos, como tentar uma chamada de novo ou paginar resultados:

Rode algumas vezes: às vezes dá certo cedo, às vezes desiste, mas sempre termina. Quando você sabe o número de voltas de antemão, um laço for informa início, fim e passo numa linha e é mais difícil de errar.

Perguntas frequentes

Qual a diferença entre while e do while no PHP?

O while verifica a condição antes de cada volta, então o corpo pode nunca rodar. do { ... } while ($cond); verifica depois de cada volta, então o corpo sempre roda pelo menos uma vez. Repare no ponto e vírgula depois da condição do do while.

Como paro um loop while infinito no PHP?

Dentro do loop, encerre-o com break quando a condição de saída for atendida: while (true) { ...; if ($done) { break; } }. Se o loop não tem break e a condição nunca fica falsa, o script roda até o max_execution_time do PHP pará-lo (requisições web) ou para sempre (linha de comando).

Quando devo usar while em vez de for no PHP?

Use while quando você não sabe quantas voltas precisa: ler até o fim de um arquivo, tentar de novo até algo dar certo, processar uma fila até ela esvaziar. Use for quando você conta, e foreach para visitar cada elemento de um array.

O PHP tem um loop do until?

Não. Negue a condição de parada num do while: do { $n++; } while (!($n >= 3)); roda até $n >= 3 ser verdadeiro. until não é uma palavra-chave do PHP.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR