mar
31
2009
1

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.

mar
26
2009
1

Minicurso PHP: 3ª Parte – Introdução ao PHP: Estruturas Condicionais ou de Controle

Olá Pessoal,

Gostando do minicurso? Espero que sim. Contribuam para o Projetista Digital postando suas dúvidas, comentários e sugestões na seção de comentários. Gostamos muito de recebê-los. Aviso dado, voltemos com a programação normal.

Conforme prometido trataremos hoje de estruturas condicionais em PHP. As condicionais nos permitem dotar os nossos programas de poder decisório. Ou seja, é possível tomar uma decisão ou outra, baseado numa condição ser ou não satisfeita.

IF – ELSE IF – ELSE

A estrutura condicional básica do PHP é o “if”. O IF possui um bloco de instruções delimitadas por { e }, a ser executado caso uma condição em parênteses seja ou não satisfeita. Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$a = 5;
$b = 10;
 
//Verifico se os números são iguais
if ($a == $b) {
    echo "São iguais";
}
 
//Verifico se são diferentes
if ($a <> $b) {
    echo "São diferentes";
}
 
//Verifico se não são idênticos
if ($a > $b) {
    echo "A é maior do que B";
}
?>

Reparou que o bloco de código entre { e } só é executado caso a condição dada entre parênteses retorne um valor lógico TRUE? Pois é. O IF funciona dessa forma: analisa uma ou várias condições entre parênteses, caso o booleano retornado seja TRUE, ele executa o código entre chaves ( { e } ), caso o valor seja FALSE ele não executa nada… E se eu quiser executar um outro bloco de instruções caso a condição retorne FALSE? Para isso usamos uma outra estrutura chamada ELSE. O ELSE possui seu próprio de bloco instruções, delimitados por { e }, que somente será executado caso a condição analisada no IF retorne FALSE. É uma estrutura opcional para complementar o IF. A idéia geral é SE condição for verdadeira EXECUTE esse bloco de instruções CASO CONTRÁRIO execute esse outro bloco de instruções. Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$a = 5;
$b = 10;
 
//Verifico se os números são iguais
if ($a == $b) {
    echo "São iguais";
}
else {
    echo "São diferentes";
}
 
//Verifico se são diferentes
if ($a <> $b) {
    echo "São diferentes";
}
else {
    echo "São iguais";
}
 
//Verifico se não são idênticos
if ($a > $b) {
    echo "A é maior do que B";
}
else {
    echo "B é maior do que A";
}
?>

Simples, né? Vamos continuar. E se eu precisar analisar uma série de condições simultaneamente? Vamos analisar as alternativas descritas nos códigos abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$nome = "Diego";
 
//Analiso várias expressões em uma única condicional
if ($nome == "Diogo" || $nome == "Rafael" || "$nome == "Diego") {
    echo "Nome válido";
}
else {
    echo "Entre com um nome válido";
}
 
//Analiso várias condições em condicionais distintas, usando a estrutura ELSE IF (Senão Se) para analisar condicionais alternativas
if ($nome == "Diogo") {
    echo "Seu nome é Diogo";
}
else if ($nome == "Rafael") {
    echo "Seu nome é Rafael";
}
else if ("$nome == "Diego") {
    echo "Seu nome é Diego";
}
else {
    echo "Entre com um nome válido";
}
 
//Analiso as condições fazendo uso de IFs aninhados
$idade = 23;
$programador = TRUE;
 
if ($nome == "Diogo" || $nome == "Rafael" || "$nome == "Diego") {
if($idade > 18) {
        if ($programador) {
                echo "Seu nome é $nome, é maior de idade e trabalha como Programador";
        }
}
}
?>

Repararam no funcionamento dos IFs aninhados? As condições IDADE e PROGRAMADOR somente serão verificados se a primeira condição (NOME) for satisfeita. Esse tipo de estrutura é muito útil para projetos futuros. Outra novidade é o ELSE IF. Isso permite que analisemos várias condições, executando blocos de instruções diferentes para cada uma delas.

OPERADOR TERNÁRIO

Existe ainda uma forma compacta de escrever a estrutura condicional básica (IF – ELSE): o operador ternário. O operador ternário funciona da seguinte forma – $variavel = (condição) ? “valor 1″ : “valor 2″, onde $variavel é o nome da variável que receberá o valor, “condição” é uma condição a ser avaliada, “valor 1″ é o valor atribuído à “$variavel” caso a condição retorne TRUE, e “valor 2″ é o valor atribuído à “$variável” caso a condição retorne FALSE. Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$idade = 18;
 
//Iremos reescrever essa condicional em uma linha apenas, usando operador ternário
if ($idade >= 18) {
$status = "Maior de Idade";
}
else {
$status = "Menor de Idade";
}
echo $status;
 
//Usando o operador ternário
$status = ($idade >= 18) ? "Maior de Idade" : "Menor de Idade";
echo $status;
?>

Legal, né? E bem simples de entender. O operador ternário nada mais é do que uma forma resumida e compacta de escrever um IF – ELSE para armazenar um valor em uma variável. Percebam que ele tem uma aplicação bem específica: atribuição de valores. Não é um substituto do IF – ELSE, apenas uma alternativa para um dado tipo de aplicação.

SWITCH – CASE

A terceira forma de trabalhar com condicionais em PHP é o comando switch. Nada mais é do que a comparação de uma variável a uma série de valores. Seu funcionamento corresponde a uma série de IFs um embaixo do outro. A estrutura do switch é a seguinte:

switch (variável) {
case valor1:
Bloco de Instruções
case valor2:
Outro bloco de instruções

case valor n:
Bloco de Instruções N
default:
Bloco de Instruções Default
}

Em cada cláusula “case” analisamos um valor possível para “variável”, e caso seja retornado TRUE na comparação executamos o bloco de instruções correspondente. Caso todos os “case” retornem FALSE é executada a cláusula “default” (parecido com o ELSE). Veja um exemplo prático de switch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$acao = "inserir";
 
switch ($acao) {
case "inserir":
echo "A ação escolhida foi INSERIR";
case "atualizar:
echo "A ação escolhida foi ATUALIZAR";
case "apagar":
echo "A ação escolhida foi APAGAR";
default:
echo "Escolha uma ação válida";
}
?>

Ops… Que foi? O swtich não funcionou? Relaxa… Quando não aplicamos o comando “break” ao fim de cada “case”, o switch não entende que precisa parar naquele ponto, e continua executando o código até o fim (cláusula “default”). Agora veja como ficará o nosso código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$acao = "inserir";
 
switch ($acao) {
case "inserir":
echo "A ação escolhida foi INSERIR";
break;
case "atualizar:
echo "A ação escolhida foi ATUALIZAR";
break;
case "apagar":
echo "A ação escolhida foi APAGAR";
break;
default:
echo "Escolha uma ação válida";
}
?>

Agora sim. Tudo funcionando! Pois bem, com isso fechamos o tema estruturas condicionais. Amanhã falaremos sobre LOOPS e sábado sobre FUNÇÕES. Fechando esse ciclo de INTRODUÇÃO AO PHP. Já na segunda falaremos sobre passagem de parâmentros entre páginas (GET e POST), formulários PHP e envio de emails com PHP. Portanto, continuem visitando o Projetista Digital diariamente.

Abraços,
Diego.

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