Estruturas de controle no PHP

Veja neste artigo informações importantes sobre estruturas de controle no PHP, mostrando a sintaxe e exemplos.

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:

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.

    #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.

    Artigos relacionados