As estruturas de controle determinam o curso de ações de um programa. Serão estudados os comandos
condicionais: if e switch e os comandos de repetição: while, do...while, for e foreach. E ainda as instruções: break e continue, usadas no controle do fluxo interno dos comandos condicionais e repetitivos.
Comandos condicionais
Um comando condicional desvia o fluxo de execução normal do programa para um comando ou bloco de comandos alternativo de programa. Os comandos condicionais são o if e o switch.
if
O comando if avalia uma expressão e dependendo do resultado é executado uma ação de um conjunto de alternativas específicas.
Sintaxe do comando if:
if (expr1)
{comandos1;}
elseif (expr2)
{comandos2;}
else
{comandos3;}
A sintaxe acima pode ser lida como segue:
Se expressão1 for verdadeira, faça comando1;
Senão, se expressão2 for verdadeira, faça comandos2;
Senão, faça comandos3;
Exemplo:
<?php
$nota1=6;
$nota2=9;
$nota3=7.5;
$media=($nota1+$nota2+$nota3)/3;
If($media>=9)
$conceito="A";
elseif($media>=7.5)
$conceito="B";
elseif($media>=5)
$conceito="C";
else
$conceito="D";
echo "Média: ".$media." - Conceito: ".$conceito;
?>
Resultado: Média: 7.5 - Conceito: B
O comando if pode ser empregado sem o uso do elseif ou else, veja um exemplo:
<?php
$media=10;
if($media==10) {
echo "Média 10. Conceito A.<br>";
echo "Parabéns!";
}
?>
Resultado:
Média 10. Conceito A.
Parabéns!
Note que o bloco de comandos executado aparece entre chaves por conter mais de uma linha de comandos.
switch
O switch é semelhante ao if, pois também avalia o valor de uma expressão e compara com os valores de cada caso na estrutura. Quando encontrar a equivalência executa o bloco de comandos correspondente.
Sintaxe do comando switch:
switch (n)
{
case valor1:
comando a ser executado se n=valor1;
break;
case valor2:
comando a ser executado se n=valor2;
break;
default:
comando a ser executado se n for
diferente dos valores anteriores;
}
Exemplo:
<?php
$opcao=0;
switch ($opcao)
{
case 1:
echo "Número 1";
break;
case 2:
echo "Número 2";
break;
case 3:
echo "Número 3";
break;
default:
echo "Número diferente dos acima.";
}
?>
Resultado da execução do script acima: Número diferente dos acima.
Quando uma mesma variável é avaliada com valores diferentes torna-se mais interessante utilizar o comando switch em vez do comando if, para que o código fique melhor estruturado, facilitando sua leitura e compreensão.
Comandos de repetição
São comandos utilizados para executar um conjunto de ações específicas até que certa condição seja satisfeita. Os seguintes comandos de repetição são verificados: while, do...while, for e foreach.
while
Repete a execução de comandos enquanto uma dada condição for verdadeira.
Sintaxe:
while (expr) {
comandos;
}
Exemplo:
<?php
$i=0;
while ($i < 10) {
echo "Linha de número $i <br> ";
$i++;
}
?>
Após a execução, o programa acima mostra 10 linhas na tela, de númento 0 até número 9:
Linha de número 0
Linha de número 1
. . .
Linha de número 9
do...while
Executa comandos enquanto uma condição for verdadeira. As instruções do corpo do laço são executadas pelo menos uma vez.
Sintaxe:
do {
comandos;
} while (expr);
Exemplo:
O programa a seguir calcula e mostra o fatorial do número 5:
<?php
$n=5;
$i = $fat = 1;
do {
$fat *= $i++;
} while ($i <= $n);
echo "O fatorial do número $n é $fat.";
?>
Resultado: O fatorial do número 5 é 120.
O uso de chaves após o comando do e antes do while neste caso não é obrigatório, uma vez que o bloco de comandos contém apenas uma instrução.
Observe que a diferença entre while e do...while é que aquele avalia a condição no início e este, no final, o que significa que a repetição do..while executa o corpo do laço pelo menos uma vez e a repetição while pode não executar nenhuma vez, dependendo da condição.
for
Repete a execução de comandos enquanto uma dada condição for verdadeira. Pontos a considerar no comando for:
deve ser determinada uma variável de controle e os valores inicial e final;
tipicamente, este comando é usado quando se sabe o número de iterações a serem executadas.
Sintaxe:
for (inicialização; condição; operador) {
comandos;
}
Efetua a somatória dos primeiros 10 números:
<?php
$soma=0;
for ($i=1; $i<=10; $i++)
$soma+=$i;
echo "A soma dos dez primeiros números é $soma.";
?>
Resultado: A soma dos dez primeiros números é 55.
foreach
O comando foreach permite percorrer os elementos de um array de modo facilitado. As duas sintaxes básicas para o comando
são:
foreach ($nome_vetor as $valor) {
comandos;
}
foreach ($nome_vetor as $chave => $valor) {
comandos;
}
A primeira forma percorre o vetor de nome $nome_vetor e em cada iteração o valor do elemento corrente é atribuído à variável $valor. A segunda forma faz a mesma coisa, só que a chave do elemento atual será atribuído à variável $chave em cada loop.
Exemplo:
<?php
$vetor = array(1, 2, 3, 4);
foreach ($vetor as $valor) {
echo $valor.", ";
}
echo "<br>";
$vet = array(1=>"A", 2=>"B", 3=>"C", 4=>"D");
foreach ($vet as $chave => $valor) {
echo "Chave: [$chave] valor => $valor".", " ;
}
?>
Resultado:
1, 2, 3, 4,
Chave: [1] valor => A, Chave: [2] valor => B, Chave: [3] valor => C, Chave: [4] valor => D,
Comandos de desvios
Os comandos break e continue são usados nas estruturas de repetição while, do...while, for e foreach.
O comando break também pode ser usado nas estruturas if e switch, ele interrompe o andamento do laço em qualquer parte, saindo da estrutura e desviando o fluxo de execução para a primeira instrução após a estrutura em que se encontra.
O comando continue abandona a instância atual, saltando para a próxima avaliação da expressão de controle, sem sair do laço.
Um exemplo do uso do comando break: O programa que segue mostra os valores de um vetor e é encerrado pelo comando break ao encontrar um elemento negativo no vetor ou quando a variável $i atingir o valor 10.
<?php
$vetor = array(1, 2, 3, 4, 5, -1, 6, 7, 8, 9);
$i = 1;
While ($i < 10) {
if ($vetor[$i] < 0)
break;
else
echo $vetor[$i]." ";
$i++;
}
?>
Resultado: 2 3 4 5
Para exemplificar o uso do comando continue o programa que segue avalia o resto da divisão por 2 da variável $i. Se resultar em verdadero, o fluxo de execução salta para a próxima iteração, mostrando na tela apenas os valores pares da sequência: