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:
- 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.
<?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";
}
?>
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
}
?>
Observe que agora temos duas condições: caso nenhuma delas seja atendida, o código declarado dentro do else é executado.
<?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";
}
?>
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";
?>
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";
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++;
}
Ao executar este código serão impressos os números de 1 a 10.
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);
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";
}
Ao executar o código da Listagem 8 serão impressos os números de 0 a 9.
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;
}
?>
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;
}
?>
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;
}
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;
}
- 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.
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";
}
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";
}
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";
}
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";
}
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";
}
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
-
DevCast
-
Artigo
-
Artigo
-
Artigo
-
Artigo