Laço WHILE - O que é, para que serve?
Quando estudamos testes condicionais, vimos que os testes realizados eram executados apenas uma vez, e apenas uma coisa acontecia (ou IF ou ELSE).
Porém, muitas vezes é necessário fazer esses testes várias e várias vezes.
Por exemplo, um botão de uma página fica o tempo inteiro perguntando:
'Fui clicado? Não, ok vou ficar quieto.'
'Fui clicado? Ainda não, ok'
'Fui clicado? Opa, agora sim, então devo chamar uma função do JavaScript'.
Temos que ficar várias e várias vezes fazendo vários testes.
E é aí que entra o laço WHILE.
Ele nada mais é que um teste condicional que se repete várias e várias vezes.
Laço WHILE - Como usar
Vamos agora aprender a sintaxe do laço WHILE, em PHP.
Ele é da seguinte maneira:
<?php while( teste_condicional){ codigo codigo } ?>
Quando o PHP chega no laço WHILE, ele vê o que tem dentro dele, entre parêntesis, e testa. Será alguma expressão ou algum valor.
Enquanto aquele teste resultar em TRUE, ele vai executar o código entre chaves.
Testa uma vez, se TRUE, executa. Testa de novo, se TRUE, executa de novo e assim vai.
O laço WHILE só vai parar quando o teste resultar FALSE, ok?
Exemplo de Laço WHILE - Looping infinito
O exemplo mais simples e clássico de laço WHILE, é o Looping infinito.É aquele que a condição que será testada vai ser sempre TRUE.
No exemplo abaixo, ela escreve "Curso PHP Progressivo" na tela...várias e várias vezes...infinitas, até travar seu navegado:
<html> <head> <title>Apostila PHP Progressivo</title> </head> <body> <?php while(TRUE) echo "PHP Progressivo <br />"; ?> </body> </html>
Obtenha uma hospedagem, suba seu arquivo PHP com esse código e trolle um amigo mandando ele entrar no seu site.
Note que, assim como IF e ELSE, se seu código tiver apenas uma linha de comando, não é obrigatório o uso de chaves.
Exemplo de WHILE: Contando até 10
O código abaixo pega uma variável, inicializa no 1, testa se é menor igual a 10.Se for, imprime o número. Depois, incrementa e roda tudo de novo.
<html> <head> <title>Apostila PHP Progressivo</title> </head> <body> <?php $count=1; while($count<=10){ echo "$count <br />"; $count++; } ?> </body> </html>Esse simples script imprime no HTML os números de 1 até 10.
Teste com 100.
Teste com 1000.
Teste com 1 milhão, veja como o PHP é rápido e foda!
Tire o $count++, o que acontece?
Por que?
Exemplo de WHILE: Contanto de 10 até 1
Vamos fazer o contrário agora.Vamos começar de 10. Enquanto a variável for maior que 0, imprimir seu valor.
Dentro do código, também temos que decrementar a variável, senão ela nunca atinge o FALSE no teste condicional:
<html> <head> <title>Apostila PHP Progressivo</title> </head> <body> <?php $count=10; while($count>0){ echo "$count <br />"; $count--; } ?> </body> </html>
Exemplo de WHILE: Exibe o dobro
Crie um script que exibe os números 1, 2, 3..., 100 e ao lado, o dobro de seu valor.Nossa variável de controle começa em 1 e vai até 100.
Enquanto for menor ou igual a 100, vai imprimir seu valor junto com o dobro.
Veja como fazer isso com laço WHILE:
<html> <head> <title>Apostila PHP Progressivo</title> </head> <body> <?php $count=1; while($count<=100){ echo "$count : ".(2*$count)."<br />"; $count++; } ?> </body> </html>
Exemplo de WHILE: Pedindo a Senha
Crie uma página que pede uma senha ao usuário e exiba "Se você não digitar a senha, seu navegador vai travar...".Enquanto ele digitar uma senha errada ou não digitar nada, ficar escrevendo "Senha errada, sistema vai travar" na tela. Quando ele digitar a senha correta (que deve ser 'rush2112'), exibir "Entrando no sistema".
O teste condicional aqui é se o que for digitado pelo usuário é 'rush2112' ou não.
Se for, ok para. Se não, vai ficar executando e executando o WHILE pra sempre...
<html> <head> <title>Apostila PHP Progressivo</title> </head> <body> <form action="" method="get"> Senha: <input type="text" name="password" /><br /> <input type="submit" name="submit" value="Testar" /> </form> <?php $senha = $_GET['password']; echo "Se você não digitar a senha, seu navegador vai travar...<br />"; while($senha != 'rush2112'){ echo "Senha errada...Sistem vai travar<br />"; } echo "Entrando no sistema..."; ?> </body> </html>