mar
31
2009

Minicurso PHP: 3ª Parte – Introdução ao PHP: Estruturas de Repetição ou Iteração (loops)

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… :-P

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.

1 Comentário »

  • Rogerio J. Gentil disse:

    Até que enfim aprendi a usar o FOREACH. Só acho que você deveria comentar mais detalhadamente os exemplos, citando os resultados dos códigos. Abs.

Assine o RSS dos comentários desse post. TrackBack URL


Comente

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com