if / else / elseif
Aprenda a ensinar o PHP a tomar decisões. Com if, else e elseif, seu programa passa a reagir de formas diferentes dependendo das condições.
O que são estruturas de controle?
Por padrão, um programa PHP executa as instruções linha por linha, de cima para baixo. Mas quase todo sistema real precisa tomar decisões: exibir uma mensagem diferente para usuários logados, bloquear acesso a menores de idade, ou exibir promoções apenas nos fins de semana.
As estruturas de controle permitem alterar esse fluxo de execução com base em condições. A mais fundamental delas é o if.
A estrutura if
O if executa um bloco de código somente se uma condição for verdadeira (true):
2$idade = 20;
3
4if ($idade >= 18) {
5 echo "Acesso permitido!\n";
6}
7
8// Saída: Acesso permitido!
== igual a · != diferente · > maior · < menor · >= maior ou igual · <= menor ou igual · === idêntico (valor e tipo)
if + else
O else define o que acontece quando a condição do if é falsa:
2$hora = 14;
3
4if ($hora < 12) {
5 echo "Bom dia!\n";
6} else {
7 echo "Boa tarde ou boa noite!\n";
8}
9
10// Saída: Boa tarde ou boa noite!
elseif: múltiplas condições
Quando há mais de dois casos possíveis, usamos elseif para encadear condições. O PHP verifica cada uma em ordem e executa apenas o primeiro bloco cujo teste for verdadeiro:
2$nota = 75;
3
4if ($nota >= 90) {
5 echo "Conceito A\n";
6} elseif ($nota >= 70) {
7 echo "Conceito B\n";
8} elseif ($nota >= 50) {
9 echo "Conceito C\n";
10} else {
11 echo "Reprovado\n";
12}
13// Saída: Conceito B
Para condições simples, use $resultado = (condição) ? valor_se_true : valor_se_false;. Exemplo: $msg = ($idade >= 18) ? "Adulto" : "Menor";
// ATIVIDADE INTERATIVA
Qual será a saída do código?
Dado o código abaixo, qual mensagem será exibida?
$x = 15;
if ($x > 20) {
echo "Grande";
} elseif ($x > 10) {
echo "Médio";
} else {
echo "Pequeno";
}
// AMBIENTE DE CÓDIGO
Exercícios Propostos
Pratique o if, else e elseif no ambiente acima
Crie um script PHP que receba uma variável $numero e exiba se o número é positivo, negativo ou zero. Teste com pelo menos três valores diferentes.
Escreva um script que defina a variável $dia_semana com um número de 1 a 7 (1 = Segunda, 7 = Domingo) e exiba se é um dia útil ou fim de semana. Use o operador || (OU) na condição.
Crie um sistema simples de classificação de IMC. Receba as variáveis $peso (kg) e $altura (m), calcule o IMC (peso / altura²) e classifique: Abaixo do peso (<18.5), Normal (18.5–24.9), Sobrepeso (25–29.9), Obesidade (≥30).
switch e match
Quando há muitas opções possíveis para uma mesma variável, o switch e o match são mais elegantes e legíveis do que uma cadeia de elseifs.
O switch: escolhendo entre muitos casos
O switch avalia uma expressão e compara seu valor com uma série de case. Quando encontra um valor igual, executa o código daquele case até encontrar um break:
2$dia = "segunda";
3
4switch ($dia) {
5 case "segunda":
6 echo "Início da semana!\n";
7 break;
8 case "sexta":
9 echo "Sextou! 🎉\n";
10 break;
11 case "sabado":
12 case "domingo":
13 echo "Fim de semana! 😎\n";
14 break;
15 default:
16 echo "Dia normal de semana.\n";
17}
18// Saída: Início da semana!
Sem o break, o PHP continua executando os cases seguintes mesmo que não correspondam ao valor — isso se chama fall-through. Às vezes é útil (como nos cases "sabado" e "domingo" acima), mas geralmente é um bug.
match: o switch moderno do PHP 8
O match foi introduzido no PHP 8 e é uma versão mais poderosa e segura do switch. Principais diferenças:
- Usa comparação estrita (valor e tipo, como ===)
- Retorna um valor — pode ser atribuído a uma variável
- Não precisa de break — cada braço é executado isoladamente
- Lança um erro se nenhum caso bater (o switch vai silenciosamente para o default)
2$status = 2;
3
4$mensagem = match($status) {
5 1 => "Pedido recebido",
6 2 => "Em processamento",
7 3 => "Enviado",
8 4 => "Entregue",
9 default => "Status desconhecido",
10};
11
12echo "Status: " . $mensagem;
13// Saída: Status: Em processamento
// ATIVIDADE INTERATIVA
Associe o conceito à estrutura correta!
Arraste cada característica para a estrutura correspondente: switch ou match.
// AMBIENTE DE CÓDIGO
Exercícios Propostos
Pratique switch e match no ambiente acima
Crie um script usando switch que receba uma variável $estacao com os valores "verao", "outono", "inverno" ou "primavera" e exiba uma mensagem característica de cada estação do ano.
Reescreva o exercício anterior utilizando match em vez de switch. Atribua o texto da mensagem a uma variável $mensagem e exiba-a com echo ao final.
Crie uma calculadora simples usando switch. Receba variáveis $a, $b e $operacao ("+", "-", "*", "/") e exiba o resultado. Trate a divisão por zero com um elseif ou case especial.
Laços for e while
Automatize repetições com os laços for e while. Pare de escrever o mesmo código dezenas de vezes — deixe o PHP fazer isso por você.
O laço for: repetição com contador
O for é usado quando você sabe exatamente quantas vezes quer repetir algo. Sua sintaxe possui três partes separadas por ponto e vírgula:
2// for (início; condição; incremento)
3
4for ($i = 1; $i <= 5; $i++) {
5 echo "Repetição número: " . $i . "\n";
6}
7
8// Saída:
9// Repetição número: 1
10// Repetição número: 2 ... até 5
11
12// For decrescente
13for ($i = 10; $i >= 1; $i--) {
14 echo $i . " ";
15}
16// Saída: 10 9 8 7 6 5 4 3 2 1
Início: executado uma vez antes do laço ($i = 1) · Condição: verificada antes de cada iteração; se false, o laço para ($i <= 5) · Incremento: executado ao final de cada iteração ($i++)
O laço while: repetir enquanto uma condição for verdadeira
O while é usado quando não sabemos de antemão quantas vezes repetiremos — apenas sabemos a condição de parada:
2$tentativas = 0;
3$max = 3;
4
5while ($tentativas < $max) {
6 $tentativas++;
7 echo "Tentativa " . $tentativas . " de " . $max . "\n";
8}
9echo "Esgotou as tentativas!\n";
10
11// Saída:
12// Tentativa 1 de 3
13// Tentativa 2 de 3
14// Tentativa 3 de 3
15// Esgotou as tentativas!
Se a condição do while nunca se tornar false, o programa ficará preso para sempre. Sempre garanta que a variável controladora seja atualizada dentro do laço.
// ATIVIDADE INTERATIVA
Preencha o laço for corretamente!
Complete o laço for para imprimir os números de 1 a 10.
echo $i . "\n";
}
// AMBIENTE DE CÓDIGO
Exercícios Propostos
Pratique for e while no ambiente acima
Usando o laço for, crie um script que exiba todos os números pares entre 1 e 30. Dica: use o operador módulo % para verificar se um número é par ($n % 2 == 0).
Usando o laço while, escreva um script que simule o crescimento de uma conta bancária. Comece com R$ 1.000,00 e aplique um rendimento de 2% ao mês. O laço deve continuar enquanto o saldo for menor que R$ 2.000,00. Exiba o saldo a cada mês e quantos meses foram necessários.
Crie um script PHP que exiba um triângulo de asteriscos usando laços for aninhados. A altura do triângulo deve ser controlada por uma variável $altura. Exemplo com altura 5:
*
**
***
****
*****
O laço foreach
O foreach é o laço mais usado em PHP. Ele percorre arrays de forma elegante e segura, item por item, sem precisar controlar índices manualmente.
foreach com arrays simples
O foreach itera sobre cada elemento de um array. A cada volta do laço, o PHP coloca o valor atual em uma variável temporária:
2$frutas = ["Maçã", "Banana", "Laranja", "Uva"];
3
4foreach ($frutas as $fruta) {
5 echo "🍎 " . $fruta . "\n";
6}
7
8// Saída:
9// 🍎 Maçã
10// 🍎 Banana ...
foreach com chave e valor
Quando o array possui chaves nomeadas (array associativo), podemos acessar tanto a chave quanto o valor com a sintaxe as $chave => $valor:
2$aluno = [
3 "nome" => "Ana Lima",
4 "curso" => "Eng. de Software",
5 "nota" => 9.5,
6];
7
8foreach ($aluno as $campo => $valor) {
9 echo $campo . ": " . $valor . "\n";
10}
11// Saída:
12// nome: Ana Lima
13// curso: Eng. de Software
14// nota: 9.5
foreach com arrays de arrays (lista de registros)
Um padrão muito comum em PHP é percorrer uma lista de registros — como dados vindos de um banco de dados:
2$produtos = [
3 ["nome" => "Notebook", "preco" => 3500],
4 ["nome" => "Mouse", "preco" => 80],
5 ["nome" => "Teclado", "preco" => 150],
6];
7
8foreach ($produtos as $produto) {
9 echo $produto["nome"] . ": R$ " . $produto["preco"] . "\n";
10}
Prefira sempre o foreach para percorrer arrays em PHP — ele é mais seguro (não precisa saber o tamanho do array), mais legível e menos sujeito a erros de índice.
// ATIVIDADE INTERATIVA
O que este foreach produz?
Analise o código abaixo e selecione a saída correta:
$notas = ["João"=>8, "Maria"=>10, "Pedro"=>6];
foreach ($notas as $nome => $nota) {
if ($nota >= 7) {
echo "$nome: Aprovado\n";
}
}
// AMBIENTE DE CÓDIGO
Exercícios Propostos
Pratique foreach no ambiente acima
Crie um array com o nome de 5 cidades brasileiras. Use foreach para exibir cada cidade com seu número de ordem (1, 2, 3...). Dica: crie uma variável contadora fora do laço.
Crie um array associativo com o cardápio de um restaurante (prato => preço). Use foreach para exibir o cardápio formatado. Ao final, calcule e exiba o preço médio dos pratos.
Crie um array com 10 números inteiros variados (positivos e negativos). Use foreach para separar e exibir em duas listas: os números positivos e os números negativos. Ao final, exiba a soma de cada grupo.
break, continue e do-while
Controle seus laços com precisão cirúrgica: interrompa loops antecipadamente com break, pule iterações com continue, e conheça o do-while.
break: interrompendo um laço
O break interrompe imediatamente o laço em que está, mesmo que a condição ainda seja verdadeira. É muito útil em buscas — assim que encontramos o que queremos, paramos:
2$produtos = ["Caneta", "Lápis", "Borracha", "Régua"];
3$busca = "Borracha";
4
5foreach ($produtos as $i => $produto) {
6 echo "Verificando: " . $produto . "\n";
7 if ($produto === $busca) {
8 echo "Encontrado na posição " . $i . "!\n";
9 break; // Para a busca aqui
10 }
11}
12// "Régua" nunca é verificada!
continue: pulando uma iteração
O continue pula o restante do código da iteração atual e vai direto para a próxima. Diferente do break, o laço continua executando:
2// Exibir apenas números ímpares de 1 a 10
3for ($i = 1; $i <= 10; $i++) {
4 if ($i % 2 === 0) {
5 continue; // Pula os pares
6 }
7 echo $i . " ";
8}
9// Saída: 1 3 5 7 9
do-while: execute pelo menos uma vez
O do-while é similar ao while, mas com uma diferença crucial: o bloco de código é executado pelo menos uma vez, pois a condição é verificada após a execução, e não antes:
2// Menu de opções — exibe pelo menos uma vez
3$opcao = 0;
4
5do {
6 echo "=== MENU ===\n";
7 echo "1. Ver produtos\n";
8 echo "2. Adicionar item\n";
9 echo "0. Sair\n";
10 $opcao = 0; // Simulando "sair"
11} while ($opcao != 0);
12
13echo "Saindo do menu.\n";
14// O menu é exibido UMA VEZ mesmo com opcao = 0
Use do-while quando o bloco precisa ser executado ao menos uma vez — como menus, validações de entrada do usuário, ou processos que devem rodar antes de verificar se devem continuar.
// ATIVIDADE INTERATIVA
Desafio Final — Módulo 3
Qual é a diferença fundamental entre break e continue dentro de um laço?
// AMBIENTE DE CÓDIGO
Exercícios Finais — Módulo 3
Consolide todo o aprendizado de Estruturas de Controle
Crie um script PHP que percorra os números de 1 a 50 e use continue para pular os múltiplos de 5. Exiba todos os outros números e, ao final, mostre a soma dos números que foram exibidos.
Implemente um algoritmo de busca em array usando foreach e break. Crie um array com 8 nomes de pessoas. Defina uma variável $procurado com um dos nomes. Use foreach para encontrá-lo, exiba sua posição e pare a busca com break. Se não for encontrado, exiba uma mensagem de "não encontrado".
Crie um script que simule um caixa registradora. Tenha um array de produtos com nome e preço. Use foreach para percorrer os produtos e, para cada um, use um if/elseif para aplicar descontos: produtos acima de R$ 100 recebem 10% de desconto, entre R$ 50 e R$ 100 recebem 5%, abaixo de R$ 50 sem desconto. Exiba o preço original, o desconto e o preço final de cada item, além do total da compra.