AULA 01 / 05 ⏱ ~20 min

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):

PHP · if-basico.php
1<?php
2$idade = 20;
3
4if ($idade >= 18) {
5  echo "Acesso permitido!\n";
6}
7
8// Saída: Acesso permitido!
💡
Operadores de comparação

== 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:

PHP · if-else.php
1<?php
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:

PHP · elseif.php
1<?php
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
Operador ternário — if em uma linha

Para condições simples, use $resultado = (condição) ? valor_se_true : valor_se_false;. Exemplo: $msg = ($idade >= 18) ? "Adulto" : "Menor";


// ATIVIDADE INTERATIVA
🧠
Quiz rápido · +10 XP

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";
}

A
Grande
B
Médio
C
Pequeno
D
Nenhuma saída
🎯
Correto! +10 XP! Como 15 > 10, o elseif é verdadeiro e imprime "Médio".

// AMBIENTE DE CÓDIGO
if-else.php
PHP Sandbox
Editor PHP
Saída
Clique em "Executar" para ver a saída...
📝

Exercícios Propostos

Pratique o if, else e elseif no ambiente acima

EXERCÍCIO 01

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.

// GABARITO
<?php
$numero = -7;

if ($numero > 0) {
    echo "$numero é positivo.\n";
} elseif ($numero < 0) {
    echo "$numero é negativo.\n";
} else {
    echo "O número é zero.\n";
}
?>
EXERCÍCIO 02

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.

// GABARITO
<?php
$dia_semana = 6; // 6 = Sábado

if ($dia_semana == 6 || $dia_semana == 7) {
    echo "Fim de semana! Hora de descansar. 😎\n";
} elseif ($dia_semana >= 1 && $dia_semana <= 5) {
    echo "Dia útil. Vamos trabalhar! 💼\n";
} else {
    echo "Número de dia inválido.\n";
}
?>
EXERCÍCIO 03 — DESAFIO

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).

// GABARITO
<?php
$peso   = 70;
$altura = 1.75;

$imc = $peso / ($altura * $altura);
$imc_fmt = number_format($imc, 2);

echo "IMC calculado: $imc_fmt\n";

if ($imc < 18.5) {
    echo "Classificação: Abaixo do peso\n";
} elseif ($imc < 25) {
    echo "Classificação: Peso normal ✅\n";
} elseif ($imc < 30) {
    echo "Classificação: Sobrepeso\n";
} else {
    echo "Classificação: Obesidade\n";
}
?>
AULA 02 / 05 ⏱ ~20 min

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:

PHP · switch.php
1<?php
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!
⚠️
Não esqueça o break!

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)
PHP · match.php
1<?php
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
🎯
Arrastar e Soltar · +15 XP

Associe o conceito à estrutura correta!

Arraste cada característica para a estrutura correspondente: switch ou match.

Precisa de break
Retorna um valor
Comparação loose (==)
Comparação estrita (===)
switch →
switch →
match →
match →
🏆
Perfeito! +15 XP! Você dominou as diferenças entre switch e match!

// AMBIENTE DE CÓDIGO
switch-match.php
PHP Sandbox
Editor PHP
Saída
Clique em "Executar" para ver a saída...
📝

Exercícios Propostos

Pratique switch e match no ambiente acima

EXERCÍCIO 01

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.

// GABARITO
<?php
$estacao = "inverno";

switch ($estacao) {
    case "verao":
        echo "Verão: Sol, praia e calor! ☀️\n";
        break;
    case "outono":
        echo "Outono: Folhas caindo e vento fresco. 🍂\n";
        break;
    case "inverno":
        echo "Inverno: Frio e chocolate quente! ❄️\n";
        break;
    case "primavera":
        echo "Primavera: Flores e clima agradável. 🌸\n";
        break;
    default:
        echo "Estação inválida.\n";
}
?>
EXERCÍCIO 02

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.

// GABARITO
<?php
$estacao = "primavera";

$mensagem = match($estacao) {
    "verao"     => "Sol, praia e calor! ☀️",
    "outono"    => "Folhas caindo e vento fresco. 🍂",
    "inverno"   => "Frio e chocolate quente! ❄️",
    "primavera" => "Flores e clima agradável. 🌸",
    default     => "Estação inválida.",
};

echo $mensagem . "\n";
?>
EXERCÍCIO 03 — DESAFIO

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.

// GABARITO
<?php
$a = 10;
$b = 3;
$operacao = "/";

switch ($operacao) {
    case "+":
        echo "$a + $b = " . ($a + $b) . "\n";
        break;
    case "-":
        echo "$a - $b = " . ($a - $b) . "\n";
        break;
    case "*":
        echo "$a * $b = " . ($a * $b) . "\n";
        break;
    case "/":
        if ($b == 0) {
            echo "Erro: divisão por zero!\n";
        } else {
            $resultado = number_format($a / $b, 2);
            echo "$a / $b = $resultado\n";
        }
        break;
    default:
        echo "Operação inválida.\n";
}
?>
AULA 03 / 05 ⏱ ~25 min

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:

PHP · for.php
1<?php
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
💡
Anatomia do for

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:

PHP · while.php
1<?php
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!
⚠️
Cuidado com loops infinitos!

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
✏️
Complete o código · +15 XP

Preencha o laço for corretamente!

Complete o laço for para imprimir os números de 1 a 10.

for ($i = ; $i ; $i) {
    echo $i . "\n";
}
Excelente! +15 XP! Você sabe construir um laço for do zero!

// AMBIENTE DE CÓDIGO
for-while.php
PHP Sandbox
Editor PHP
Saída
Clique em "Executar" para ver a saída...
📝

Exercícios Propostos

Pratique for e while no ambiente acima

EXERCÍCIO 01

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).

// GABARITO
<?php
echo "Números pares de 1 a 30:\n";
for ($i = 1; $i <= 30; $i++) {
    if ($i % 2 == 0) {
        echo $i . " ";
    }
}
echo "\n";

// Alternativa mais eficiente: começar em 2 e incrementar de 2 em 2
for ($i = 2; $i <= 30; $i += 2) {
    echo $i . " ";
}
?>
EXERCÍCIO 02

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.

// GABARITO
<?php
$saldo = 1000.00;
$taxa  = 0.02;
$mes   = 0;

while ($saldo < 2000) {
    $mes++;
    $saldo *= (1 + $taxa);
    $saldo_fmt = number_format($saldo, 2, ',', '.');
    echo "Mês $mes: R$ $saldo_fmt\n";
}

echo "\nDoubling time: $mes meses para dobrar o capital!\n";
?>
EXERCÍCIO 03 — DESAFIO

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:

*
**
***
****
*****

// GABARITO
<?php
$altura = 5;

for ($linha = 1; $linha <= $altura; $linha++) {
    for ($col = 1; $col <= $linha; $col++) {
        echo "*";
    }
    echo "\n";
}
?>

/* Saída:
*
**
***
****
*****
*/
AULA 04 / 05 ⏱ ~20 min

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:

PHP · foreach-simples.php
1<?php
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:

PHP · foreach-associativo.php
1<?php
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:

PHP · foreach-lista.php
1<?php
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}
foreach vs for para arrays

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
🧠
Quiz de código · +20 XP

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";
  }
}

A
João: Aprovado · Maria: Aprovado · Pedro: Aprovado
B
João: Aprovado · Maria: Aprovado
C
Maria: Aprovado
D
Nenhuma saída — erro de sintaxe
🎉
Correto! +20 XP! Pedro (nota 6) não passa pelo if pois 6 < 7.

// AMBIENTE DE CÓDIGO
foreach.php
PHP Sandbox
Editor PHP
Saída
Clique em "Executar" para ver a saída...
📝

Exercícios Propostos

Pratique foreach no ambiente acima

EXERCÍCIO 01

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.

// GABARITO
<?php
$cidades = ["São Paulo", "Rio de Janeiro", "Curitiba", "Salvador", "Fortaleza"];

$i = 1;
foreach ($cidades as $cidade) {
    echo "$i. $cidade\n";
    $i++;
}
?>
EXERCÍCIO 02

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.

// GABARITO
<?php
$cardapio = [
    "Frango grelhado" => 28.90,
    "Peixe assado"    => 35.50,
    "Salada Caesar"   => 18.00,
    "Massa carbonara" => 32.00,
    "Risoto funghi"   => 42.00,
];

echo "=== CARDÁPIO ===\n";
$total = 0;
$qtd = 0;

foreach ($cardapio as $prato => $preco) {
    $preco_fmt = number_format($preco, 2, ',', '.');
    echo "$prato: R$ $preco_fmt\n";
    $total += $preco;
    $qtd++;
}

$media = number_format($total / $qtd, 2, ',', '.');
echo "\nPreço médio: R$ $media\n";
?>
EXERCÍCIO 03 — DESAFIO

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.

// GABARITO
<?php
$numeros = [5, -3, 8, -12, 1, -7, 4, -2, 9, -6];

$positivos  = [];
$negativos  = [];

foreach ($numeros as $num) {
    if ($num >= 0) {
        $positivos[] = $num;
    } else {
        $negativos[] = $num;
    }
}

echo "Positivos: " . implode(", ", $positivos) . "\n";
echo "Soma dos positivos: " . array_sum($positivos) . "\n\n";
echo "Negativos: " . implode(", ", $negativos) . "\n";
echo "Soma dos negativos: " . array_sum($negativos) . "\n";
?>
AULA 05 / 05 ⏱ ~25 min

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:

PHP · break.php
1<?php
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:

PHP · continue.php
1<?php
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:

PHP · do-while.php
1<?php
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
💡
Quando usar do-while?

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
🏆
Quiz Final do Módulo · +25 XP

Desafio Final — Módulo 3

Qual é a diferença fundamental entre break e continue dentro de um laço?

A
Não há diferença — ambos encerram o laço completamente.
B
break pula a iteração atual; continue encerra o laço inteiro.
C
break encerra o laço inteiro; continue pula apenas a iteração atual e vai para a próxima.
D
continue só funciona dentro do switch, não em laços.
🎓
+25 XP! Parabéns! Módulo 3 concluído com maestria!

// AMBIENTE DE CÓDIGO
break-continue.php
PHP Sandbox
Editor PHP
Saída
Clique em "Executar" para ver a saída...
🏁

Exercícios Finais — Módulo 3

Consolide todo o aprendizado de Estruturas de Controle

EXERCÍCIO 01

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.

// GABARITO
<?php
$soma = 0;

for ($i = 1; $i <= 50; $i++) {
    if ($i % 5 === 0) {
        continue; // Pula múltiplos de 5
    }
    echo $i . " ";
    $soma += $i;
}

echo "\n\nSoma dos números exibidos: $soma\n";
?>
EXERCÍCIO 02

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".

// GABARITO
<?php
$nomes = ["Alice","Bruno","Carla","Diego",
          "Elisa","Felipe","Gisele","Henrique"];
$procurado = "Felipe";
$encontrado = false;

foreach ($nomes as $indice => $nome) {
    if ($nome === $procurado) {
        echo "\"$procurado\" encontrado na posição $indice!\n";
        $encontrado = true;
        break;
    }
}

if (!$encontrado) {
    echo "\"$procurado\" não foi encontrado no array.\n";
}
?>
EXERCÍCIO 03 — DESAFIO FINAL

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.

// GABARITO
<?php
$produtos = [
    ["nome" => "Notebook",   "preco" => 3500.00],
    ["nome" => "Mouse",      "preco" => 80.00],
    ["nome" => "Mousepad",   "preco" => 35.00],
    ["nome" => "Headset",    "preco" => 150.00],
    ["nome" => "Cabo USB",   "preco" => 25.00],
];

$total = 0;
echo "=== CAIXA REGISTRADORA ===\n\n";

foreach ($produtos as $item) {
    $preco = $item["preco"];

    if ($preco > 100) {
        $desconto_pct = 10;
    } elseif ($preco >= 50) {
        $desconto_pct = 5;
    } else {
        $desconto_pct = 0;
    }

    $desconto = $preco * ($desconto_pct / 100);
    $preco_final = $preco - $desconto;
    $total += $preco_final;

    $p = number_format($preco, 2, ',', '.');
    $d = number_format($desconto, 2, ',', '.');
    $f = number_format($preco_final, 2, ',', '.');

    echo $item["nome"] . ":\n";
    echo "  Original: R$ $p | Desconto: {$desconto_pct}% (-R$ $d) | Final: R$ $f\n";
}

$total_fmt = number_format($total, 2, ',', '.');
echo "\n========================\n";
echo "TOTAL: R$ $total_fmt\n";
?>
Ver todos os módulos →
XP Total
0 / 85 XP