Laço do while em PHP

O laço do while em PHP funciona de maneira extremamente similar ao laço while, porém, ao invés de avaliar a expressão e executar a ação caso ela seja avaliada como verdadeira, no laço do while a ação é executada e só depois a expressão é avaliada.

Nesse caso, você tem a certeza de que a ação será executada no mínimo uma vez, já que a expressão só será avaliada ao final da interação laço.

Outro ponto diferente do laço while, é que o laço do while é escrito de maneira um pouco diferente, veja:

do {
	Ação
} while ( condição );

Vamos ver ambos, while e do while na prática (para uma melhor explicação sobre apenas o laço while, acesse Laço While em PHP – Aula 17).

Do while em PHP

Suponhamos que eu queira contar até 10 utilizando um laço do while em PHP, veja o exemplo:

<?php
// Número inicial
$num = 0;

do {
	$num++;
	echo $num;
} while ( $num < 10 );

A expressão acima irá retornar exatamente 12345678910 na tela do navegador do usuário pelo seguinte:

  • Configuramos uma variável inicial com valor 0 ($num = 0);
  • No laço do while, a ação é executada, então, na primeira linha da ação somamos mais um (+1) na variável $num a cada interação do laço com o operador de incremento. Na segunda linha da ação mostramos o valor de $num na tela com o comando echo.
  • Na última linha do laço do while, verificamos a nossa expressão (se $num é menor que 10). O laço será executado enquanto $num for menor que 10. Como estamos incrementando de um em um a variável $num (0 + 1, 1 + 1, 2 + 1…), quando o valor da variável $num chegar em 10, o laço para de ser executado.

Neste caso, tanto o laço while quanto do while retornariam a mesma coisa na tela.

Veja:

<?php
// Número inicial
$num = 0;

// Do while retorna 12345678910
do {
	$num++;
	echo $num;
} while ( $num < 10 );

// Quebra de linha em HTML
echo '<br>';

// Zera a variável $num novamente
$num = 0;

// While retorna 12345678910
while ( $num < 10 ) {
	$num++;
	echo $num;
}
?>

Agora vamos avaliar uma expressão onde while e do while retornam valores diferentes:

<?php
// Número inicial
$num = 0;

// Do while retorna Ação executada na tela
do {
	echo 'Ação executada';
} while ( $num > 1 );

// While não retorna nada
while ( $num > 1 ) {
	echo 'Ação executada';
}
?>

Perceba que agora a minha expressão (condição) mudou, estou verificando se a variável $num é maior do que um ($num > 1), ou seja, como $num tem o valor zero (0), e zero não é maior que um, o valor retornado por ela será falso (false), consequentemente, a ação do laço não deveria ser executada. Porém, como o laço do while executa primeiro a ação e depois verifica a ação, o interpretador do PHP irá exibir "Ação executada" na tela pelo menos uma vez. Já para o laço while, a ação não será executada, porque a expressão foi analisada antes da ação ser executada.

Break – Pare o laço

Caso você queira parar o laço antes que ele verifique todas as expressões, você pode utilizar a palavra chave break, veja:

<?php
// Número inicial
$num = 0;

// Do while retorna Ação executada na tela
do {
	// Soma mais um em $num
	$num++;
	
	// Verifica se $num é maior que 10
	if ( $num > 10 ) {
		// Para o laço
		break;
	}
	
	// Mostra $num na tela
	echo $num;
} while ( $num < 1000 );
?>

No trecho de código acima, era de se esperar que o valor retornado fossem milhares de números (literalmente, de 1 a 1000) na tela, pois, minha expressão será avaliada enquanto $num for menor do que 1000. Porém, no meio do laço existe uma estrutura condicional if que avalia se $num é menor do que 10; se for, a palavra break será executada e o laço para de executar imediatamente.

Aulas anteriores

Veja todas as aulas, e mais, na categoria Curso de PHP do Tutsup.