Aprender PHP

Assine o RSS

If, else e elseif as estruturas de controle no PHP

Criado em: 07/05/2010 09:10:46

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.

Ultima alteração em: 07/05/2010 09:10:46

Comentários

Leo em 07/05/2010

Muito bom esse artigo!!!! Parabéns!

Saulo Calixto em 28/07/2010

Muito bom, essa é a parte mais interessante, e tenho certeza que ficará ainda melhor. Estou gostando muito de PHP, e do seu site que está me ajudando muito a aprender.

Mauro em 03/08/2010

Saulo Calixto,

Que bom Saulo que o site está sendo útil pra você.

Luiz em 04/08/2010

Muito bom artigo.
Amigo eu tenho um outro problema e não estou conseguindo resolve-lo.
É o seguinte eu tenho que pensar em uma logica da seguinte maneira:

Alunos existentes no banco
Alunos existentes no excel
Alunos com alterações (mudança de turma ...)

Eu pensei em uma estrutura de controle da seguinte maneira:

if (nuMatricula!=$s1){
UPDATE na tabela em stStatus='N';
}
elseif (nuMatricula==$s1){
UPDATE na tabela aluno, em todos os dados menos na matricula;
}
elseif (nuMatricula=="") {
INSERT na tabela quando não esxitir os alunos na tabela do banco e existir no excel;
}

Essa logica que não to entendendo direito como elaborar redondinho.
Valeu, abs!

Dudu em 30/11/2010

Muito bom seu materia tiro um dúvida minha que estava me dando dor de cabeça vale pela ajuda.

www.tzkdesign.tk em 06/03/2011

PARABÉNS pelo excelente trabalho. Comecei as lições faz 4 dias e esta é a primeira vez que comento. Estou curtindo muito, a forma como vc apresenta os conteúdos é muito belo, no sentindo de objetivo, fácil, bom uso das cores pra explicar, estou entendendo tudo fácinho :) thanx

Mauro em 07/03/2011

Valeu pelo elogio. Que bom que gostou dos textos.

Muito bom saber que os artigos foram úteis para o seu aprendizado. Espero que continue ajudando.

Abraço

A.Maia em 28/05/2011

Após longs 24 meses,só agora percebi a lógca e a sintaxe das estrut de contrle

André Kosloski em 10/09/2011

Opa companheiro, fiz uma pequena inclussão em seu artigo.
Coloquei um pequeno controlador de falta, que indicará se o aluno
tem ou não o minímo de presença para ser aprovado e acrescentei uma rotina para verificar
se o aluno precisou realizar recuperação. Se sim a nota da mesma substitui
o valor da menor nota, se não roda normal, caso a média da recuperação for
menor que a menor nota, a recuperacao é invalidada. Comentadinha abaixo

<?php
$nota1 = 70;
$nota2 = 15;
$nota3 = 70;
$nota4 = 70;
#Declarando o valor da recuperacao
$recuperacao = 15;
#Declarando as faltas
$falta1 = 0;
$falta2 = 0;
$falta3 = 0;
$falta4 = 0;
#lendo a menor nota que o aluno tirou
$menor = min( $nota1, $nota2, $nota3, $nota4 );
# MIN = menor nota, entre () os valores. Para a maior nota/numero use MAX

#somando as faltas.
$faltas = ($falta1 + $falta2 + $falta3 + $falta4);

#gerando as medias
$media = '';
#Somando as notas e dividindo para ver se a média é maior ou igual a 70,
if((($nota1 + $nota2 + $nota3 + $nota4) / 4) >= 70){
#caso positivo imprime a media normal.
$media = (($nota1 + $nota2 + $nota3 + $nota4) / 4);

#Verificando se a recuperacao e maior que a menor nota.
} elseif ($recuperacao > $menor){
#caso positivo soma as notas mais a recuperacao e subtrai a menor nota, dividindo por 4.
$media = (($nota1 + $nota2 + $nota3 + $nota4 + $recuperacao - $menor) / 4);
#recuperacao menor soma e dividi por 4.
} elseif ($recuperacao < $menor){
$media = (($nota1 + $nota2 + $nota3 + $nota4) / 4);
#recuperao igual a menor nota soma igual.
} else {
$media = (($nota1 + $nota2 + $nota3 + $nota4) / 4);
}
#Embora o ultimo elseif seja desnessesário deixei ele para exemplificar.

$resultado = '';
#aplica o resultado verificando as faltas.
if( $media >= 70 && $media !=100 && $faltas <= 25 ){
$resultado = 'Aluno Aprovado.';
} elseif( $media == 00 && $faltas > 25 ) {
$resultado = 'O aluno não atingiu a média miníma, cuidado nota zero, e reprovou por falta.';
} elseif( $media == 00 && $faltas <= 25 ) {
$resultado = 'O aluno não atingiu a média miníma, cuidado nota zero, mas frequentou a aula.';
} elseif( $media == 100 && $faltas <= 25 ) {
$resultado = 'O aluno foi aprovado com média máxima.';
} elseif( $media == 100 && $faltas > 25 ) {
$resultado = 'O aluno foi aprovado com média máxima e reprovou por falta.';
} elseif( $media < 70 && $faltas <= 25) {
$resultado = 'O aluno não atingiu a média miníma porem frequentou as aulas.';
} elseif( $media < 70 && $faltas > 25) {
$resultado = ' O aluno reprovou, e não teve presenca';
} elseif( $media >= 70 && $media !=100 && $faltas > 25 ){
$resultado = ' Aluno aprovado por nota e reprovado por falta.';
} else {
$resultado = 'Outra coisa, falta algo';}
# outra coisa, é desnessesário, apenas para usar de teste

# imprime resultados
echo $resultado;
echo '<p></p>';
echo $media;
echo '<p></p>';
echo $menor;

?>

Luis Henrique em 25/01/2012

MUito massa. Não sabia nada de nada, mas com esse simples exemplo, consegui entender de forma clar!

Adicionar Comentário