Um dos passos mais importante para aprender a programar, além de estudar, é ter uma base bem solidificada em cada assunto inerente a linguagem de programação que deseja realmente programar. Neste artigo falaremos especificamente sobre: IF, WHILE, DO..WHILE, FOR, FOREACH e SWITCH além de outros comandos que fazem parte da estrutura de controle no PHP.

A estrutura de controle no PHP é dividida em duas partes: comandos de seleção e comandos de repetição. Veja com mais detalhe essa divisão e seus respectivos comandos:

  • Comandos de seleção: são também conhecidos como comandos condicionais e com eles é possível executar comandos ou bloco de comandos com base em testes feitos durante a execução. Os comandos são: IF e SWITCH.
  • Comandos de Repetição: São utilizados para que um conjunto de instruções seja executado repetidamente por um determinado número de vezes ou até que uma condição seja atingida. Os comandos são: WHILE, DO..WHILE, FOR e FOREACH.

IF/ELSE

Os operadores condicionais são um dos recursos mais básicos da programação e são essenciais no desenvolvimento da lógica de qualquer sistema ou aplicação. São utilizados quando é necessário que determinado código seja executado apenas se atender a uma condição. Veremos neste artigo as estruturas de condição if/else, elseif (ou else if) e operador ternário.

Sintaxe do if/else:

<?php
  if (condicao) {
  // código se a condição for atendida
} else {
  // código se a condição não for atendida
}
?>

Assim, caso a condição seja atendida, o primeiro bloco de código será executado, senão, é executado o segundo bloco.Na Listagem 1 temos um exemplo.

O uso do else não é obrigatório. Em muitos casos apenas o if será suficiente. Além disso, o uso das chaves para delimitar o bloco de código é opcional caso nele seja declarada apenas uma linha. Ainda assim, recomenda-se o uso das chaves visando melhor legibilidade do código.
<?php 

//Declaração das variáveis "a" e "b"
$a = 4;
$b = 2;

/*Condição criada onde para ser validada
a divisão entre $a e $b deve ser igual a 2*/
if ($a/$b == 2) {

  //Retorno da condição
  echo "O resultado da divisão é 2";

/*Caso a condição do IF não seja validada 
o conteúdo do ELSE será retornado*/
} else {

  //Retorno da condição
  echo "O resultado da divisão não é 2";

}
?>
Listagem 1. Exemplo de implementação IF/ELSE
RUN

Neste código verificamos se a divisão de um número é igual a 2. Caso verdadeiro, executamos o primeiro bloco de código, caso contrário, o segundo.

elseif ou else if

Além do if/else, existe também a condicional elseif ou else if. Essa opção é utilizada caso seja necessário verificar duas ou mais condições. Veja a estrutura da sua sequência na Listagem 2.

<?php
if ($condicaoUm) {

 // código se a condiçãoUm for atendida

} elseif ($condicaoDois) {

 // código se a condiçãoDois for atendida

} else { 

 // código se nenhum das condições forem atendidas

}
?>
Listagem 2. Sintaxe do elseif

Observe que agora temos duas condições: caso nenhuma delas seja atendida, o código declarado dentro do else é executado.

Podemos declarar quantos elseif forem necessários para atender a lógica a ser implementada.
<?php 

$a = 8;
$b = 2;

if ($a/$b==2) {

  echo "O resultado da divisão é 2";

} elseif ($a/$b==4) {

  echo "O resultado da divisão é 4";

} else {

  echo "O resultado da divisão não é 2 nem 4";

}
?>
Listagem 3. Exemplo de implementação elseif
RUN

Na Listagem 3 temos um exemplo semelhante ao anterior, mas como declaramos mais uma condição foi necessário utilizar o elseif.

Operador ternário

Outra estrutura de condição é o operador ternário, o qual também é chamado de if ternário. Em suma, ele é uma versão compacta do if. Sua sintatxe é apresentada abaixo:

condição ? codigo_1 : codigo_2;

Primeiro declaramos a condição, logo após o sinal de interrogação (?) e o código a ser executado caso a condição seja verdadeira. E depois dos dois pontos temos o código a ser executado caso contrário.

<?php

//Declaração das variáveis
$a = 8;
$b = 2;

//Impressão do resultado da condição da operação ternária
echo $a/$b == 2 ? "O resultado da divisão é 2" : "O resultado da divisão não é 2";
?>
Listagem 4. Exemplo de implementação operador ternário
RUN

O resultado da execução da Listagem 4 será a impressão da mensagem O resultado da divisão não é 2.

Forma curta ou short form

O operador ternário também possui uma versão ainda mais compacta, chamada de "forma curta" ou short form". A sintaxe da forma curta do operador ternário é:

(condição/codigoUm) ?: codigoDois;

Dessa forma, caso a condição seja atendida, a própria será o código a ser executado, caso contrário, será executado o codigoDois. Na Listagem 5 temos um exemplo prático.

$nome = "Fulano de tal";
$nome = ($nome) ?: "Sem nome";
Listagem 5. Exemplo de short form
RUN
A forma curta do operador ternário só está disponível a partir da versão 5.3 do PHP.

WHILE

While é a estrutura de repetição mais simples do PHP e com ele informamos que um bloco de código deve ser repetido enquanto a condição declarada for verdadeira. É um comando de repetição (laço) simples, pois executa um conjunto de comandos até que uma determinada condição seja atendida. Veja abaixo a sintaxe do comando:

while (condição) {
  // bloco de código
} 

A sintaxe é composta por uma expressão, validada antes de cada iteração do loop, e pelo bloco de código a ser executado, declarado entre chaves { }. Se a expressão retornar falso, o loop não é executado. Exemplo de uso vemos na Listagem 6.

$i = 1;
while ($i <= 10) {
    echo $i;
    $i++;
}
Listagem 6. Exemplo uso do While
RUN

Ao executar este código serão impressos os números de 1 a 10.

O while pode ser declarado sem as chaves, desde que possua dentro dele apenas uma linha de código. No entanto, recomenda-se o uso das chaves mesmo nestas ocasiões, visando manter uma boa legibilidade do código.

Do While

O loop do while tem comportamento parecido com o while, diferenciando-se somente na validação do loop, que é feita no final de cada iteração. Sua sintaxe é apresentada a seguir:

do {
      //bloco de código
  } while (condição);
  

Devido a essa característica, normalmente utilizamos essa estrutura de repetição quando desejamos que o bloco de código declarado no loop seja executado pelo menos uma vez. Temos um exemplo de uso na Listagem 7.

$i = 1;
do {
  echo $i;
  $i++;
} while ($i < 11);
Listagem 7. Exemplo implementação "do while"
RUN

FOR

O for é a estrutura de repetição do PHP que utilizamos quando sabemos a quantidade de repetições que devem ser executadas. A sua sintaxe é apresentada abaixo:

for (expressão 1; expressão 2; expressão 3) {
  // bloco de código
}

A sintaxe é composta por três expressões separadas por ponto e vírgula, cada uma delas podendo ter zero, uma ou mais declarações separadas por vírgula:

  • Expressão 1: Executada somente uma vez, ao iniciar o loop. Normalmente a utilizamos para declarar e inicializar as variáveis que faremos uso para controlar o número de iterações do loop;
  • Expressão 2: Expressão booleana, validada antes de cada iteração do loop. Se a expressão contiver múltiplas expressões, todas serão executadas, mas somente o resultado da última será considerado. Se a expressão for vazia, ela será interpretada como verdadeira. O loop somente será executado enquanto essa expressão retornar true;
  • Expressão 3: Executada ao final de cada iteração, normalmente utilizada para declarar a forma de atualização do valor da variável avaliada na expressão 2.
for ($i=0; $i < 10; $i++) {
  echo $i."\n";
}
Listagem 8. Exemplo implementação do for
RUN

Ao executar o código da Listagem 8 serão impressos os números de 0 a 9.

O for pode ser declarado sem um bloco de código, colocando as ações dentro da terceira expressão. Ademais, caso haja apenas uma linha a ser executada, as chaves são opcionais. No entanto, recomenda-se o uso delas mesmo nestas ocasiões, visando manter uma boa legibilidade do código.

FOREACH

Com o comando FOREACH trabalhamos com coleções de dados, ou seja, vetores e matrizes, funcionando a partir da versão 4 do PHP. Vamos tentar entendê-lo no código da Listagem 9.

<?php
 foreach ($nome_array as $variavel){
   comandos;
 }
?>
Listagem 9. Sintaxe de uma estrutura FOREACH

Na Listagem 10 temos um exemplo onde um array é percorrido e seus elementos são exibidos.


<?php
$meu_vetor = array(“A”, “B”, “C”, “D”, “E”);
   foreach ($meu_vetor as $elemento){
   echo $elemento;
 }
?>
Listagem 10. Exemplo de uso do FOREACH

Apresentamos nesse tópico a utilização do foreach percorrendo um array. Abordaremos o estudo de array mais a frente.

SWITCH

O switch/case é uma estrutura condicional que está presente em várias linguagens de programação. Ela recebe um valor como parâmetro e verifica se ele atende alguma das condições especificadas. Em caso positivo o trecho de código relacionado a essa condição é executado.

Diferente da estrutura if/else, o switch/case avalia apenas condições de igualdade. Ou seja, ela verifica se o valor recebido como parâmetro é igual a alguma das opções especificadas em seu corpo. Esse comportamento equivale à utilização de vários if/else em sequência, porém, com uma sintaxe mais enxuta e de fácil leitura.

Na Listagem 11 é possível ver a sintaxe da estrutura switch/case. Ela inicia recebendo uma expressão como parâmetro e em seguida são feitas verificações para saber se ela corresponde a algum dos valores especificados.

01 switch (expressão) {
case valor1:
  //código a ser executado se a expressão for igual ao valor1
  break;
case valor2:
  //código a ser executado se a expressão for igual ao valor2
  break;
case valorN:
  //código a ser executado se a expressão for igual ao valorN
  break;
}
Listagem 11. Exemplo sintaxe SWITCH
  • Linha 1: O parâmetro do switch/case deve estar entre parênteses e pode ser tanto uma variável quanto um método ou expressão;
  • Linhas 2, 5 e 8: A palavra reservada case seguida de um valor (numérico, string, etc.) verifica se a expressão recebida como parâmetro é igual a esse valor. Se for, o trecho de código entre o case e o break logo abaixo será executado;
  • Linhas 3, 6 e 9: Os trechos de código entre o case e o break são executados caso a condição especificada no case seja atendida. Aqui pode haver várias linhas de código sem a necessidade de uso de chaves para delimitar o bloco;
  • Linhas 4, 7 e 10: O comando break faz com que a verificação seja encerrada caso a condição do case equivalente seja atendida. Isso faz com as demais condições não sejam avaliadas, pois como se trata de comparações de igualdade, apenas uma delas será atendida.
  • Cases agrupados

    Caso um mesmo trecho de código deva ser executado para diferentes condições é possível agrupar os cases, da seguinte forma:

    switch (expressão) {
    case valor1:
    case valor2:
    case valor3:
      //primeiro código
      break;
    case valor3:
      //segundo código
      break;
    }
    
    • Linhas 2 e 3: Note que os dois primeiros case não possuem o comando break. Isso faz com que o fluxo do código passe para a próxima verificação até encontrar um break. Neste caso, se o valor da expressão for 0 ou 1 o código seguirá e executará o trecho referente ao case 2. Em seguida o break da linha 6 encerrará o fluxo do switch.

    Default

    Dentro do switch também é possível especificar um trecho de código que deve ser executado no caso de nenhuma das condições ser atendida. Para esse caso temos o comando default, que deve ser adicionado após todos os case, da seguinte forma:

    
    switch (expressão) {
      case valor1:
        //código referente ao valor1
        break;
      case valor2:
        //código referente ao valor2
        break;
      case valorN:
        //código referente ao valorN
        break;      
      default:
        //código caso nenhuma condição seja atendida
      break;
    }
    
    • Linhas 11 a 13: A estrutura do default é semelhante à do case, porém, esse comando não recebe nenhum valor. Ele será executado caso nenhuma das condições anteriores seja atendida.

    Na Listagem 12 podemos ver um exemplo prático de uso da estrutura switch/case.

    $escolhaNumero = 2;
    
    switch ($escolhaNumero) {
      case 0:
    
        echo "numero vale 0";
        break;
    
      case 1:
    
        echo "numero vale 1";
        break;
    
      case 2:
    
        echo "numero vale 2";
      break;
    }
    
    Listagem 12. Exemplo implementação prática do SWITCH
    RUN
    • Linha 1: A variável $escolhaNumero recebe um valor 2;
    • Linha 3: Por meio do switch verificamos a variável $escolhaNumero a fim de executar um procedimento para cada valor possível;
    • Linhas 4 a 17: Verificamos se o valor $escolhaNumero foi 0, 1 ou 2 e para cada situação imprimimos uma mensagem específica;

    Chamamos de fluxo de controle a ordem na qual cada declaração em um programa é interpretada e executada. Em estruturas como for, foreach, while, do-while ou switch, o fluxo de controle retorna à primeira declaração após a última ser executada, até que uma condição seja avaliada como falsa. Os comandos break e continue oferecem maior controle sobre tais estruturas, alterando o fluxo de controle para a próxima iteração ou encerrando todo ciclo de repetições.

    Passo 1: Como localizar um item em uma lista de dados Passo 2: ...passando pelo menor número de itens? Passo 3: Para percorrer uma lista podemos criar um laço de repetição Passo 4: Mas isso certamente fará ela ser percorrida até o final Passo 5: Para evitar isso podemos usar o comando break Passo 6: Mas, e quando queremos pular uma iteração? Passo 7: Nesse caso podemos usar o comando continue
    #PraCegoVer - Transcrição dos Slides Percorrer listas de dados é uma tarefa muito comum em aplicações
    Mas algumas vezes queremos localizar e coletar apenas um item dentre os muitos que podem estar presentes
    Para percorrer a lista podemos usar uma estrutura de repetição, como for, foreach, while, etc. Mas como evitar que o loop continue após encontramos o item desejado?
    Por padrão, foreach continuará a percorrer a lista até que ela chegue ao final, mas nós queremos parar o loop bem aqui!
    foreach ($funcionarios as $i => $funcionario){
    if ($funcionario ['id'] == 22) {
    $busca = $funcionario; }}

    O comando break nos permite encerrar a execução do loop em um momento específico. Nesse caso é exatamente o que desejamos!
    foreach ($funcionarios as $i => $funcionario){
    if ($funcionario ['id'] == 22) {
    $busca = $funcionario;
    break; }}

    Ok, e se quiséssemos coletar todos os demais itens, exceto o de id 22?
    Para termos maior controle sobre estruturas de repetição também contamos com continue, que pula a execução atual, passando próxima
    foreach ($funcionarios as $i => $funcionario){
    if ($funcionario ['id'] == 22) {
    $busca = $funcionario; }}

    foreach ($funcionarios as $i => $funcionario){
    if ($funcionario ['id'] == 22) {
    [ continue;}
    $busca['id'] = $funcionario; }

    Veremos como utilizar os comandos break e continue no PHP.

    Break

    Break encerra uma estrutura de repetição imediatamente. Geralmente usamos if/else para determinar o momento em que essa condição de encerramento será executada.

    A sintaxe do comando do break é esta:

    break;

    Na Listagem 13 encerramos a execução do while imediatamente após o contador $i alcançar o valor “3”. Como resultado serão impressos apenas os valores “1 2”, em lugar de “1 2 3 4”.

    $i = 0;
    while ($i++ < 5) {
      if ($i == 3) break;
        echo $i . "\n";
    }
      
    Listagem 13. Exemplo implementação prática do break
    RUN

    Perceba que no caso acima break fez com que o laço fosse interrompido, mesmo antes da condição de encerramento $i++ < 5 ser satisfeita.

    Continue

    Continue pula a iteração atual, ignorando todo o código declarado abaixo dele, dentro da estrutura de repetição. Geralmente utilizamos if/else para determinar o momento em que esse comando deverá ser executado.

    A sintaxe do comando continue é esta:

    continue;

    Na Listagem 14 saltamos para a próxima iteração quando $i atinge o valor “3”. Como resultado o código echo $i . "\n" não imprimirá esse valor, apenas “1 2 4 5”.

    $i = 0;
    while ($i++ < 5) {
      if ($i == 3) continue;
        echo $i . "\n";
    }
    Listagem 14. Exemplo implementação prática do continue
    RUN

    Interrompendo vários laços

    O Break aceita como argumento o número de estruturas aninhadas a serem interrompidas, sendo 1 seu valor padrão.

    Na Listagem 15 encerramos a execução de três while imediatamente após imprimir o valor “1”. Como resultado serão impressos apenas os valores “3 2 1”. Os comandos nas linhas 14 e 16 serão ignorados.

    $i = 0;
    while ($i++ < 3) {
      echo "3\n";
      while (1) {
        echo "2\n";
        while (1) {
          echo "1\n";
    
          /*Como o break recebeu o argumento numérico 3,
          este será o nº de estruturas a serem interrompidas
          no caso os 3 whiles*/
          break 3;
        }
        echo "Essa linha nunca vai ser exibida\n";
      }
      echo "Nem essa linha\n";
    }
    Listagem 15. Exemplo interrompendo vários laços
    RUN

    Continue também aceita um argumento numérico opcional que diz quantos níveis de laços aninhados devem seguir para a próxima iteração. O valor padrão é 1, afetando apenas o laço em cujo escopo o comando está declarado.

    Na Listagem 16 saltamos para o início do primeiro while após imprimir o valor “1”. Como resultado serão impressos apenas os valores 3 2 1 3 2 1 3 2 1 3 2 1. Os comandos nas linhas 10 e 12 serão, portanto, ignorados.

    $i = 0;
    while ($i++ < 3) {
      echo "3\n";
        while (1) {
          echo "2\n";
            while (1) {
              echo "1\n";
              continue 3;
            }
        echo "Essa linha nunca vai ser exibida\n";
        }
      echo "Nem essa linha\n";
    }
    Listagem 16. Exemplo interrompendo vários laços
    RUN

    Comportamento do Switch

    Diferentemente de outras linguagens, no PHP switch é considerada uma estrutura de repetição. Portanto, se switch está dentro de um for, ou qualquer outra estrutura de repetição, continue 2 também afetará o fluxo de execução em mais de um nível.

    Como exemplo, na Listagem 17 os comandos continue 2 e break 2 impedirão que o valor “X” seja impresso em todas as iterações de while. Como resultado serão impressos apenas os valores “1a X 2c 3e X 4g”.

    $i = 0;
    while ($i++ < 4) {
      switch ($i) {
        case 1:
          echo $i . "a\n";
          continue;
          echo $i . "b\n";
        case 2:
          echo $i . "c\n";
          continue 2;
          echo $i . "d\n";
        case 3:
          echo $i . "e\n";
          break;
          echo $i . "f\n";
        case 4:
          echo $i . "g\n";
          break 2;
          echo $i . "h\n";
      }
      echo "X\n";
    }
    Listagem 17. Exemplo comportamento switch
    RUN

    Neste artigo vimos as principais estruturas de controle do PHP que serão importantes no processo de aprendizado da linguagem, conhecendo suas sintaxes, devidas implementações e características.