Olá Pessoal,
Com um puta atraso de uns quatro dias (minha alergia à poeira é uma M***), posto o conteúdo referente à estruturas de repetição (loops) no PHP. Durante essa semana irei postar uma lista de exercícios para vocês praticarem todo o conteúdo do blog, e o índice desse minicurso (para terem uma idéia clara do que virá depois), e estou fazendo alguns testes para implementar vídeo-aulas (aquele vídeo-tutorial de instalação do Apache, PHP e MySQL foi o começo). [MODE TYPE="CHANTAGEM_EMOCIONAL"]É claro que quanto mais vocês comentarem os posts, seja com reclamações, sugestões, dúvidas e elogios (de preferências
, maior é o meu incentivo em desenvolver esse material… [/MODE]
Voltando aos loops… Essas são estruturas extremamente importantes e relevantes para o contexto de programação. O uso inteligente de loops nos poupa “muito trabalho de corno” (Nota do Autor – um amontoado de código desnecessário), e só esse motivo já é mais do que suficiente para você absorver tudo o que puder do assunto. Vamos então! Não vou explicar o que é um loop etc., isso é escopo do minicurso de Lógica de Programação (em desenvolvimento), e conhecer o básico de seu funcionamento é pré-requisito para esse minicurso online de PHP. Se não sabe o que é um loop, espere até o minicurso de Algoritmo (não tarda), ou dê uma pesquisada na web sobre o tema.
FOR
A primeira estrutura de repetição que estudaremos é o FOR. Ele consiste de um contador, uma condição de saída e um operador de incremento ou decremento. A idéia básica de seu funcionamento é: PARA um dado valor do CONTADOR, e uma DADA CONDIÇÃO VERDADEIRA, execute um bloco de instruções e AUMENTE/DIMINUA o CONTADOR. Veja na prática:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php /* Primeiro exemplo - "$i = 0" verifica o valor do contador, iniciado em 0; "$i < 10" é a condição de permanência do LOOP (roda enquanto $i for menor que 10); "$i++" é o operador de incremento, ele acrescenta um ao valor do contador no fim de cada volta (é a mesma coisa que $i = $i + 1) */ for ($i = 0; $i < 10; $i++) { echo "$i; "; } /* Segundo exemplo - Usando um for para percorrer um array */ $nomes = array("João", "Maria", "Juca", "Ana", "Daniela"); $tamNomes = count($nomes); //count() é uma função que retorna o tamanho de um array for ($i = 0; $i < $tamNomes; $i++) { echo $tamNomes[$i]."; "; } ?> |
WHILE
Uma outra estrutura de repetição muito usada no PHP é o WHILE. O WHILE é uma mistura de loop com condicional. Seu processo de avaliação de condicionais é bem parecido com um IF. Funciona da seguinte forma: ENQUANTO uma dada CONDIÇÃO for VERDADEIRA, ele irá executar repetidamente um bloco de instruções. Veja na prática:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php //Exemplo 01 $num = 5; while ($num > 1) { echo $num; $num--; } //Exemplo 02 $idade = 14; $ano = 2009; while ($idade <= 18) { echo $ano." - ".$idade."<br />"; $idade++; $ano++; } ?> |
Percebam que a cada volta do loop é feita uma verificação. Caso o valor retornado na condição seja TRUE o loop executará o bloco de instruções entre { }, reiniciando a verificação. Como incrementamos ou decrementamos as variáveis, em um dado momento a condição irá retornar FALSE, parando a execução do loop. O WHILE é muito usado para varreduras de resources (arquivos, consulta ao banco de dados etc.).
DO-WHILE
Existe uma variante da estrutura WHILE, onde a verificação é feita no fim do loop, ao invés do começo, e com isso garantindo a execução do bloco de instruções uma vez ao menos. Essa estrutura é conhecida como DO-WHILE. Como eu disse, a sintaxe é muito parecida com o WHILE, a única coisa que muda é o momento onde se faz a verificação. Veja o código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php /* WHILE - Verificação antes da execução do código Como $num não é menor que 1, o bloco de instruções não será executado */ $num = 5; while ($num < 1) { echo $num; $num++; } /* DO-WHILE - Verificação depois da execução do código O bloco de instruções será executado uma vez, e somente depois será verificado que $num é maior que 1 */ do { echo $num; $num++; } while ($num < 1) ?> |
Entendeu? Ainda não? Relaxa, é bem simples: como dizia um amigo meu – no WHILE perguntamos para depois atirar, no DO-WHILE a gente atira e depois pergunta…
Quando usar um ou outro? Bem, se o bloco de instruções só pode ser executado caso a condição seja TRUE, então usamos o WHILE. Agora, se é preciso executar as instruções uma vez ao menos, independente da condição, aí usamos o DO-WHILE.
FOREACH
O FOREACH é uma estrutura de repetição específica para arrays. Sua sintaxe é uma versão simplificada do FOR. Na prática, ele desmembra um array em seus itens, tratando cada índice e valor de forma isolada, por meio da cláusula AS. O FOREACH possui duas formas de aplicação, uma simplificada e outra mais completa. Apresentaremos ambas, porém a versão completa é mais usual. Veja o FOREACH na prática:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $nomes = array("João", "Maria", "Juca", "Ana", "Daniela"); //Exemplo 1: Versão compacta - Não trabalha com a chave do elemento foreach ($nomes as $valor) { echo "$valor - "; } //Exemplo 2: Versão completa - Trabalha com a chave e valor do elemento foreach ($nomes as $chave => $valor) { echo "$chave => $valor;<br />"; } ?> |
Reparem que “$chave” corresponde ao índice do elemento, e valor é o conteúdo desse elemento. Com essa estrutura podemos fazer inúmeras coisas interessantes no PHP. O FOREACH é um loop para percorrer ESPECIFICAMENTE arrays e objetos (a partir da versão 5 do PHP), ou seja se você tentar usá-lo em qualquer outra situação, o PHP retornará uma mensagem de erro. Em resumo: você pode usar outros loops para percorrer arrays, mas não pode usar o FOREACH para percorrer nada além de arrays e objetos.
CONTINUE E BREAK
Em algumas situações precisamos parar a execução do loop e: ir para a próxima iteração (volta do loop); sair definitivamente do loop. Nessas situações usamos os comandos CONTINUE e BREAK. O BREAK nós vimos no SWITCH-CASE (tutorial passado): serve para interromper a estrutura de repetição. Já o CONTINUE serve para encerrarmos a volta atual do loop e ir para a próxima. Veja ambos em ação:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php $nomes = array("João", "Maria", "Juca", "Ana", "Daniela"); //Exemplo 1: Continue foreach ($nomes as $chave => $valor) { if ($valor == "Ana") { continue; } else { echo "$chave => $valor;<br />"; } } //Exemplo 2: Break foreach ($nomes as $chave => $valor) { if ($valor == "Ana") { break; } else { echo "$chave => $valor;<br />"; } } ?> |
Bem, é isso. Mais uma etapa cumprida! Pesquise um pouco mais sobre loops e pratique. Amanhã falaremos sobre FUNÇÕES. Na quinta, para fechar o ciclo básico do PHP abordaremos o tema “requisição de arquivos – include() e require()”. Até lá.
Abraços,
Diego.