Neste tutorial de nossa
apostila de PHP, vamos aprender o que é, para que serve e como usar o laço WHILE em PHP.
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>