If, else e elseif as estruturas de controle no PHP
Criado em: 07/05/2010
Introdução
Você aprendeu trabalhar com a entrada, o processamento e a saída de dados com a utilização de variáveis e constantes além dos operadores aritméticos e o que fará mais sentido aqui os operadores de comparação e os operadores lógicos.
Até o momento sem as estruturas de controle não podemos tomar decisões. Imagine o seguinte problema.
Problema
- Ler a entrada de 4 notas de um aluno
- Obter sua média
- Se a média for maior ou igual a 7 retornar aprovado menor que 7 retornar reprovado
- Exibir a média do aluno e se foi aprovado ou reprovado
Como você pode observar as partes 1 e 2 do problema poderíamos resolver facilmente com os operadores aritméticos. Veja o exemplo a seguir:
<?php /** * Entrada das 4 notas do aluno */ $nota1 = 10; $nota2 = 9; $nota3 = 7; $nota4 = 5; /** * Obtendo a média do aluno */ $resultado = ($nota1 + $nota2 + $nota3 + $nota4) / 4; /** * Retornando a média */ echo $resultado; ?>
Caso não tenha entendido o uso dos operadores ou o porquê do parêntesis. Recomendo antes de continuar ler o artigo sobre operadores no PHP e o artigo que fala sobre a precedência dos operadores no PHP
No entanto a parte 3, não poderíamos desenvolver até aqui, pois necessitamos das estruturas de controle, que você irá ver agora.
If o desvio condicional simples no PHP
O construtor If
tem como objetivo executar todo o código que esteja entre o construtor caso o resultado da avaliação seja verdadeiro caso contrario nada será executado.
Continuando o problema anterior mais neste ponto apenas um fragmento para ilustrar.
Problema
- Ler a entrada de 4 notas de um aluno
- Obter sua média
- Se a média for maior ou igual a 7 retornar aprovado
- Exibir a média do aluno e se foi aprovado
O diagrama de blocos
Observe como seria a representação do nosso problema no diagrama de blocos.
O símbolo de inicio não é nenhuma novidade afinal já foi explicado no artigo sobre algoritmo e diagrama de blocos no PHP, o símbolo seguinte também já é um conhecido nosso o de entrada de dados, no entanto como teremos a entrada de 4 valores foi preferível exemplificar desta forma apenas um símbolo de entrada e os valores separados por virgula. Em seguida o processamento novamente nada demais, se esta com duvida sobre o porquê da variável $mensagem
vazia não se preocupe se você não conseguir descobrir um pouco mais a frente será explicado. Agora o nosso símbolo novo é o losango que é o nosso símbolo de decisão. Observe também a presença das letras S e N representando respectivamente sim e não. Caso a condição dentro do bloco de decisão seja verdadeira o que esta dentro do bloco do sim, S, será executado, caso seja falsa o que estiver dentro do bloco do não, N, será executado. Observe o uso das setas para indicar a direção do processamento. Ao final novamente um símbolo conhecido o display e para finalizar o terminal final.
No PHP
Seguimos a mesma lógica do código anterior, no entanto observe que criamos a variável $mensagem, em seguida criamos a nossa estrutura de controle If
com o operador de comparação >=
se esta expressão for verdadeira a variável $mensagem
terá uma valor dizendo que o aluno foi aprovado. Se a nota for menor que 7 apenas exibe a nota. Observe o código a seguir:
<?php /** * Entrada das 4 notas do aluno */ $nota1 = 10; $nota2 = 9; $nota3 = 7; $nota4 = 5; /** * Obtendo a média do aluno */ $resultado = ($nota1 + $nota2 + $nota3 + $nota4) / 4; /** * Crio a mensagem */ $mensagem = ''; if( $resultado >= 7 ){ $mensagem = ' o aluno foi aprovado'; } /** * Retornando a média */ echo $resultado . $mensagem; ?>
Você sabe o porquê de termos criado a variável $mensagem
com um valor vazio antes do If
? O objetivo disto é o seguinte, pois independente da nota exibimos a variável $mensagem
no nosso retorno, e se a nota for menor que 7 não teríamos a variável $mensagem
, pois ela só seria criada se a média fosse maior ou igual a 7, o que geraria um erro de notice afinal o PHP estaria tentando exibir uma variável inexistente. No artigo de instalação do PHP exibimos como manter para seu PHP exibir todos os erros.
Em relação a estrutura de controle If
:
- As expressões são exibidas entre parêntesis logo após a declaração da estrutura
- Expressões são realizadas por operadores lógicos e operadores de comparação
- O bloco de código referente a estrutura de controle deve ser delimitado por chaves
{}
- Endente o código referente ao bloco em 4 espaços por questões de legibilidade, a como configurar o seu editor de texto para transformar Tabs em espaços
Até aqui está legal nosso programa, se a nota for maior que 7 ele exibe que foi aprovado, no entanto ainda falta ele exibir também quando o aluno for reprovado, pois até o momento quando ele é reprovado apenas a nota é exibida, então é neste ponto que conheceremos outra estrutura de controle o else
.
Else o desvio condicional composto no PHP
O else é a estrutura de controle que é executada quando o If
, ou elseif
, você aprenderá a seguir, for retornado falso.
Continuando o nosso primeiro problema apresentado agora poderemos exibir a média e se foi aprovado ou reprovado. Lembrando que com apenas o If
conseguíamos exibir apenas o aprovado.
O diagrama de blocos
Observe como seria a representação do nosso problema no diagrama de blocos.
Seguimos a mesma lógica do diagrama anterior. E como foi dito que o else é executado quando o if
for retornado falso, apenas tivemos que criar um bloco de processamento seguindo para o bloco da letra N afinal é o else
e só será executado se a condição for falsa.
No PHP
Seguimos a mesma lógica do código anterior, no entanto observe que logo após o fechamento do if
inserimos a nossa nova clausula else
. O que poderia ser lido assim “se resultado for maior ou igual a 7 o aluno foi aprovado senão o aluno foi reprovado”. Lembrando que será executado o bloco if
se a expressão, em nosso caso $resultado >= 7
, for verdadeira senão será executado o else. Observe o código a seguir:
<?php /** * Entrada das 4 notas do aluno */ $nota1 = 10; $nota2 = 2; $nota3 = 7; $nota4 = 5; /** * Obtendo a média do aluno */ $resultado = ($nota1 + $nota2 + $nota3 + $nota4) / 4; /** * Crio a mensagem */ $mensagem = ''; if( $resultado >= 7 ){ $mensagem = ' o aluno foi aprovado'; } else { $mensagem = ' o aluno foi reprovado'; } /** * Retornando a média */ echo $resultado . $mensagem; ?>
Mantemos a variável mensagem criada antes por questões de visibilidade e padronização do nosso código, pois aqui de um jeito ou de outro ela seria criada se fosse maior ou igual a 7 ou se não fosse menor que 7 devido ao nosso else.
Em relação a estrutura de controle else:
- Não possui expressões a ser avaliada é executado após um
if
, ouelseif
, você aprenderá a seguir, ter retornadofalse
(falso) - O bloco de código referente à estrutura de controle deve ser delimitado por chaves
{}
- Endente o código referente ao bloco em 4 espaços por questões de legibilidade, a como configurar o seu editor de texto para transformar Tabs em espaços
Tudo bem até aqui finalizamos o nosso problema, apresentado no inicio. No entanto podemos o incrementar ainda mais para ficar mais legal. E se o aluno tirar 10? Ele foi aprovado, mais podemos exibir uma mensagem especial igual as que as professoras de primário exibem. Sendo assim se o aluno tirar 10 exibiremos uma mensagem especial e para exibir esta mensagem especial utilizaremos da estrutura de controle elseif
.
Elseif outro desvio condicional composto no PHP
O elseif
é a estrutura de controle que será avaliada após o if
retornar falso, o elseif
é inserido antes do else
, e mais de um elseif
pode ser inserido, lembrando que o elseif
avalia expressões assim como o if
. Ficando assim se um if
retornar falso caíra no elseif
, se o elseif
retornar falso cairá no próximo elseif
se houver, após todos os elseif
finaliza á lógica no else
.
Continuando nossa lógica da média do aluno, iremos exibir uma mensagem de sucesso quando ele tirar 10, e uma mensagem para ele estudar mais se tirar 0, pois como foi dito podemos ter mais de um elseif
, além do que já esta sendo exibido o aprovado e reprovado.
O diagrama de blocos
Observe como seria a representação no diagrama de blocos com a inserção da nossa nova lógica.
Observe que adicionamos mais uma condição no if
agora nosso resultado além de ser maior ou igual a 7 não pode ser 10, pois o 10 tem uma mensagem especial. Se esta condição for verdadeira exibe a mensagem de aprovado, até aqui tudo igual. Se a condição for falsa verificamos se a variável $resultado
é igual a 0 se a condição for verdadeira retornamos uma mensagem, se for falsa, verificamos novamente o valor de $resultado
se é igual a 10 se for verdadeira a expressão retornamos uma mensagem caso contrario caímos no nosso else que diz que o aluno foi reprovado. Observe que utilizamos o mesmo símbolo de condição, o losango, para representar o elseif
. E um novo símbolo que é um pequeno circulo, o conector, foi utilizado para conectar as condições e todas levarem para um mesmo final.
No PHP
Mantendo a mesma lógica do código anterior adicionamos 2 estruturas elseif
antes do else
. Uma para quando a média do aluno for igual a 0 e outra para quando a média do aluno for igual a 10, assim retornando mensagens personalizadas para estas médias. Observe que adicionamos uma nova condição ao if
com o operador lógico &&
e com o operador de comparação !=
pois aqui dissemos para retornar o resultado do if
se a nota for maior ou igual a 7 e não igual a 10, afinal 10 tem um tratamento especial. Agora porque não colocamos o operador de negação no 0? Porque o if
só é executado se o $resultado
for maior ou igual a 7 e como o 0 é menor ele não se encaixa no if
e seguiria para o próximo elseif
. Observe o código a seguir:
<?php /** * Entrada das 4 notas do aluno */ $nota1 = 10; $nota2 = 10; $nota3 = 10; $nota4 = 10; /** * Obtendo a média do aluno */ $resultado = ($nota1 + $nota2 + $nota3 + $nota4) / 4; /** * Crio a mensagem */ $mensagem = ''; if ( $resultado >= 7 && $resultado != 10 ) { $mensagem = ' o aluno foi aprovado.'; } elseif ( $resultado == 0 ) { $mensagem = ' estude mais, você não acertou nada.'; } elseif ( $resultado == 10 ) { $mensagem = ' parabéns! Aprovado com nota máxima.'; } else { $mensagem = ' o aluno foi reprovado.'; } /** * Retornando a média */ echo $resultado . $mensagem; ?>
Em relação a estrutura de controle elseif
:
- O
elseif
será avaliada após oif
retornar falso - É inserido depois do
if
e antes doelse
- Podemos ter vários
elseif
antes doelse
- Aceita expressões
- As expressões são exibidas entre parêntesis logo após a declaração da estrutura
- Expressões são realizadas por operadores lógicos e operadores de comparação
- O bloco de código referente à estrutura de controle deve ser delimitado por chaves
{}
- Endente o código referente ao bloco em 4 espaços por questões de legibilidade, a como configurar o seu editor de texto para transformar Tabs em espaços
Ainda temos mais estruturas de controle no PHP, sendo assim no próximo artigo voltaremos a elas. Enquanto isso experimente, com as estruturas de controle que aprendeu tente resolver pequenos problemas. Por exemplo entre com 3 valores um operador, a e b e de acordo com o operador o programa tem que executar uma operação matemática(soma, subtração, multiplicação e divisão) utilizando as estruturas de controle aprendidas aqui e os operadores do PHP.