Aprender PHP

Assine o RSS

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

  1. Ler a entrada de 4 notas de um aluno
  2. Obter sua média
  3. Se a média for maior ou igual a 7 retornar aprovado menor que 7 retornar reprovado
  4. 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

  1. Ler a entrada de 4 notas de um aluno
  2. Obter sua média
  3. Se a média for maior ou igual a 7 retornar aprovado
  4. 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.

Diagrama de blocos do problema apresentado

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.

Diagrama de blocos do problema apresentado

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, ou elseif, você aprenderá a seguir, ter retornado false(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.

Diagrama de blocos do problema apresentado

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 o if retornar falso
  • É inserido depois do if e antes do else
  • Podemos ter vários elseif antes do else
  • 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.

Comentários

comments powered by Disqus