25 Exercícios de PHP Resolvidos: Treine Lógica e IF/ELSE

🏋️ Hora de Suar a Camisa!

Você já aprendeu a teoria sobre variáveis, operadores lógicos e estruturas de decisão (IF, ELSE, ELSEIF). Mas na programação, a teoria não serve de nada sem a prática. Preparamos uma meglista com 25 exercícios de lógica em PHP baseados em situações do mundo real para você fritar os neurônios e evoluir de verdade.

Recomendamos que você tente fazer todos eles. Crie uma pasta no seu servidor local (XAMPP/WAMP), abra seu editor de código e vá resolvendo um por um. Se travar, clique nos links de solução onde estiverem disponíveis.


🟢 Nível 1: Aquecimento Básico

  1. Faça um script em PHP que verifique se uma letra digitada é vogal ou consoante.
    [✏️ Ver Solução / Dica]
  2. Faça uma página Web que pede duas notas de um aluno. Em seguida, ele deve calcular a média do aluno e dar o seguinte resultado:
    • "Aprovado", se a média alcançada for maior ou igual a sete;
    • "Reprovado", se a média for menor do que sete;
    • "Aprovado com Distinção", se a média for igual a dez.
    [✏️ Ver Solução / Dica]
  3. Faça um script que leia três números inteiros e mostre eles na ordem crescente.
    [✏️ Ver Solução / Dica]
  4. Faça uma página que leia três números inteiros, em seguida mostre o maior e o menor deles.
  5. Faça um script que peça dois números inteiros e armazene-os em duas variáveis. Em seguida, troque o valor das variáveis e exiba na tela.
    [✏️ Ver Solução / Dica]
  6. Faça um script em PHP que leia três números e mostre-os em ordem decrescente.
  7. Faça uma página que pergunte em que turno você estuda. Peça para digitar M (Matutino), V (Vespertino) ou N (Noturno). Imprima a mensagem "Bom Dia!", "Boa Tarde!" ou "Boa Noite!" ou "Valor Inválido!", conforme o caso.

🟡 Nível 2: Desafios Intermediários

  1. As Organizações Tabajara resolveram dar um aumento de salário aos seus colaboradores. Faça um script que recebe o salário atual e calcula o reajuste:
    • Salários até R$ 280,00 (incluindo): aumento de 20%
    • Salários entre R$ 280,00 e R$ 700,00: aumento de 15%
    • Salários entre R$ 700,00 e R$ 1500,00: aumento de 10%
    • Salários de R$ 1500,00 em diante: aumento de 5%
    Após o cálculo, exiba o salário anterior, o percentual aplicado, o valor do aumento e o novo salário.
  2. Faça um script para o cálculo de uma folha de pagamento. O script deverá pedir o valor da sua hora e a quantidade de horas trabalhadas no mês. Considere: FGTS (11% do bruto, não descontado), Sindicato (3% do bruto, descontado), e o IR (Imposto de Renda) que varia:
    • Bruto até 900: isento.
    • Bruto até 1500: desconto de 5%.
    • Bruto até 2500: desconto de 10%.
    • Bruto acima de 2500: desconto de 20%.
    Imprima o resumo demonstrativo listando Bruto, Descontos detalhados e o Salário Líquido.
  3. Faça um script que leia um número e exiba o dia correspondente da semana (1-Domingo, 2-Segunda, etc.). Se digitar outro valor, mostre "Valor inválido".
  4. Faça um programa que lê duas notas parciais, calcule a média e aplique um conceito: A (9 a 10), B (7.5 a 9), C (6 a 7.5), D (4 a 6) e E (0 a 4). Imprima as notas, a média, o conceito e a mensagem “APROVADO” (se A, B ou C) ou “REPROVADO” (se D ou E).
  5. Crie uma página que peça os 3 lados de um triângulo. O script deverá informar se os valores formam um triângulo. Se formarem, diga se é: Equilátero (3 lados iguais), Isósceles (2 lados iguais) ou Escaleno (3 lados diferentes).
    [✏️ Ver Solução / Dica]
  6. Faça um site que calcule as raízes de uma equação do segundo grau (ax² + bx + c). Peça os valores de a, b e c, e informe as raízes. (Dica: Para achar a raiz quadrada no PHP, use a função sqrt()).
    [✏️ Ver Solução / Dica]
  7. Faça um script em PHP que peça um ano e informe se ele é ou não bissexto.
    [✏️ Ver Solução / Dica]
  8. Faça um site que peça uma data no formato dd/mm/aaaa e determine se a mesma é uma data válida.
  9. Faça um script que peça um número inteiro e determine se ele é Par ou Ímpar. (Dica: utilize o operador de módulo `%`). Depois, peça um segundo número e responda se o primeiro é múltiplo do segundo.
    [✏️ Ver Solução / Dica]

Travou em algum exercício? 🆘

Aprender lógica de programação batendo a cabeça no teclado faz parte, mas você não precisa sofrer sozinho. Nossa Apostila PHP Progressivo traz a solução comentada linha por linha desses e de dezenas de outros desafios. Baixe agora e tenha o gabarito offline para consultar sempre que precisar!

Quero o Gabarito (Baixar Apostila) →

🔴 Nível 3: Projetos de Lógica Avançada

  1. Faça um site que leia um número inteiro menor que 1000 e imprima a quantidade de centenas, dezenas e unidades do mesmo. Exemplo: 326 = 3 centenas, 2 dezenas e 6 unidades. Preste atenção na gramática (uso do plural e da letra "e").
  2. Sistema de Caixa Eletrônico: O script deverá perguntar ao usuário o valor do saque e informar quantas notas de cada valor serão fornecidas. As notas disponíveis são: 1, 5, 10, 50 e 100 reais. Valor mínimo de saque: 10 reais. Máximo: 600 reais. (Ex: Sacar 256 reais gera duas notas de 100, uma de 50, uma de 5 e uma de 1).
  3. Faça um site que peça um número e informe se ele é Inteiro ou Decimal. (Dica: utilize funções de arredondamento como round() ou ceil() para fazer a checagem).
  4. Faça um site que leia 2 números, pergunte a operação desejada (+, -, *, /) e exiba o resultado acompanhado de uma análise: se o resultado é par/ímpar, positivo/negativo e inteiro/decimal.
  5. O Detetive: Faça um script que faça 5 perguntas para uma pessoa sobre um crime:
    • "Telefonou para a vítima?"
    • "Esteve no local do crime?"
    • "Mora perto da vítima?"
    • "Devia para a vítima?"
    • "Já trabalhou com a vítima?"
    Classificação: 2 respostas SIM = "Suspeita", 3 ou 4 = "Cúmplice", 5 = "Assassino". Caso contrário, "Inocente".
  6. Posto de Gasolina: Álcool (Até 20L: desconto 3%, Acima: 5%). Gasolina (Até 20L: desconto 4%, Acima: 6%). Leia litros e tipo. Preços: Gasolina R$ 2,50 | Álcool R$ 1,90. Calcule o valor final.
  7. A Fruteira: Morango (Até 5Kg: R$ 2,50/kg | Acima: R$ 2,20/kg). Maçã (Até 5Kg: R$ 1,80/kg | Acima: R$ 1,50/kg). Se passar de 8Kg totais ou R$ 25,00, dê mais 10% de desconto. Calcule o valor final.
  8. Hipermercado Tabajara: Carnes em promoção.
    • Filé Duplo: Até 5Kg (R$ 4,90/Kg) | Acima (R$ 5,80/Kg)
    • Alcatra: Até 5Kg (R$ 5,90/Kg) | Acima (R$ 6,80/Kg)
    • Picanha: Até 5Kg (R$ 6,90/Kg) | Acima (R$ 7,80/Kg)
    Cliente pode levar apenas um tipo. Cartão Tabajara dá 5% de desconto. Gere um cupom fiscal detalhado.

🔥 Exercício 25: O Desafio Bônus (Teste de Entrevista)

O Teste "FizzBuzz": Este é o teste de lógica mais famoso do mundo, aplicado em entrevistas para filtrar programadores juniores. Consegue resolver?

Escreva um script PHP que imprima na tela os números de 1 a 100. Porém:

  • Para múltiplos de 3, imprima a palavra "Fizz" em vez do número.
  • Para múltiplos de 5, imprima a palavra "Buzz" em vez do número.
  • Para números que são múltiplos de ambos (3 e 5), imprima "FizzBuzz".

Dica: A ordem em que você monta os seus IFs fará toda a diferença neste exercício!


Você sobreviveu à lista de exercícios?

Se você conseguiu resolver a maior parte desses desafios, parabéns! Sua lógica está pronta para construir sistemas reais. Prove suas habilidades com o nosso certificado!

Curso de PHP com certificado
★ Obter meu certificado de Programador PHP!

Tutorial de PHP: Como Usar o Operador Ternário (?:) - IF/ELSE em 1 Linha

🎯 O que você vai aprender nesta aula:

  • O que é o Operador Ternário (?:).
  • Como transformar blocos gigantes de IF/ELSE em apenas uma linha.
  • Exemplos práticos de uso no dia a dia.
  • Bônus Sênior: Conheça o Operador de Coalescência Nula (??).

Em um tutorial passado do nosso curso de PHP, mencionamos uma verdade absoluta: o bom programador é "preguiçoso". Mas calma, não no sentido pejorativo da palavra! Dizemos isso no sentido de buscar sempre a solução mais simples, eficiente, limpa e direta para um problema.

O que é o Operador Ternário no PHP ( ?: )

Você já deve estar cansado de escrever estruturas condicionais clássicas, que ocupam várias linhas de código no seu arquivo, como esta:

<?php
    if (condicao_for_verdadeira) {
        $resultado = "Faz isso";
    } else {
        $resultado = "Faz aquilo";
    }
?>

Achando que isso era escrever demais para tomar decisões simples, os criadores da linguagem implementaram o Operador Ternário (representado pelos símbolos ?:). Ele é, basicamente, um IF e um ELSE comprimidos em uma única linha!

A Sintaxe do Operador Ternário

A estrutura funciona como uma pergunta e duas respostas possíveis:

teste_condicional ? valor_se_TRUE : valor_se_FALSE;

Ou seja, você faz um teste (uma pergunta). O ponto de interrogação ? avalia isso. Se for verdade, ele retorna o que está imediatamente após a interrogação. Se for falso, ele ignora a primeira opção, pula os dois pontos : e retorna o último valor.

Exemplo 1: Verificação de Idade

Exercício: Crie um script PHP que pede a idade de um usuário. Se for menor de 18, diga que ele ainda não pode dirigir. Se for maior ou igual, avise que ele já pode dirigir. Use o operador ternário.

Veja como o código fica extremamente curto:

<html>
<head>
    <title>Apostila PHP Progressivo</title>
</head>
<body>
    <form action="" method="get">
        Sua Idade: <input type="number" name="age" required />
        <input type="submit" value="Testar" />
    </form> 

<?php 
    if(isset($_GET['age'])) {
        $idade = $_GET['age'];
        
        // A mágica acontece aqui, direto no echo!
        echo ($idade < 18) ? "Você ainda não pode dirigir." : "Você JÁ pode dirigir!";
    }
?>
</body>
</html>

🚀 Escreva menos, programe mais!

A diferença entre um código amador e um código profissional muitas vezes está nos detalhes, como saber a hora certa de usar um operador ternário. Para treinar essas "sacadas" de programação com centenas de exemplos práticos, baixe agora a Apostila PHP Progressivo. Estude no seu ritmo, sem depender da internet!

Baixar Apostila Completa →

Exemplo 2: Sistema de Notas de Aluno

Exercício: Crie um script em PHP que pergunte a média final do aluno. Se for menor que 7, avise que ele foi reprovado. Igual ou acima de 7, ele passou direto.

<html>
<head>
    <title>Apostila PHP Progressivo</title>
</head>
<body>
    <form action="" method="get">
        Média do Aluno: <input type="number" step="0.1" name="media" required />
        <input type="submit" value="Verificar Status" />
    </form> 

<?php 
    if(isset($_GET['media'])) {
        $media = $_GET['media'];
        
        // Salvando o resultado do ternário direto dentro de uma variável
        $status = ($media < 7) ? "Reprovado" : "Aprovado";
        
        echo "<h3>O aluno está: $status</h3>";
    }
?>
</body>
</html>

🔥 Bônus Sênior: O Operador Null Coalescing (??)

Você reparou que nos exemplos usamos isset($_GET['nome_do_campo']) para verificar se o formulário foi enviado antes de tentar usar a variável? Se não fizermos isso, o PHP exibe um erro de "Undefined index".

Nas versões mais recentes do PHP (7+), foi criado um "irmão" mais novo para o operador ternário, focado exatamente nisso: o Operador de Coalescência Nula (??). Ele verifica se algo existe; se existir, ele usa. Se não existir (for nulo), ele usa um valor padrão. Exemplo rápido:


$nome = $_GET['usuario'] ?? 'Visitante Anônimo';

Seu código já está ficando com cara de profissional! Vamos para o próximo desafio?

Continuar Curso (Próxima Aula) »

Tutorial de PHP: Como Saber se um Ano é Bissexto (Algoritmo e Função Nativa)

🎯 O que você vai aprender nesta aula:

  • A matemática e a lógica por trás dos anos bissextos.
  • Como usar o operador de resto de divisão (%) junto com operadores lógicos.
  • Criar o algoritmo manual clássico cobrado em faculdades e testes lógicos.
  • Como usar o "jeito sênior" com a função nativa date() do PHP.

Todo programador, em algum momento da vida, vai precisar lidar com datas. E quando o assunto é data, fevereiro é sempre o mês problemático. Neste tutorial de PHP, vamos unir o que aprendemos sobre OPERADORES LÓGICOS para criar um script que descobre se um ano tem 365 ou 366 dias.

Como saber se um ano é bissexto no PHP?

Para verificar se um ano é bissexto em PHP, você pode usar uma equação lógica avaliando se o ano é múltiplo de 400, ou se é múltiplo de 4 mas não de 100. Alternativamente, basta usar a função nativa do PHP date('L', mktime(0, 0, 0, 1, 1, $ano)), que retorna 1 (TRUE) para anos bissextos.

A Lógica de Programação (O Algoritmo)

Antes de sairmos digitando código igual malucos, precisamos entender a regra do mundo real. Normalmente, temos 365 dias no ano, com fevereiro tendo 28 dias. Porém, a cada 4 anos, a Terra dá aquela atrasadinha básica na translação e precisamos adicionar um dia extra.

A regra matemática para o Algoritmo do Ano Bissexto é a seguinte:

  1. Todo ano múltiplo de 400 é sempre bissexto (Ex: 1600, 2000, 2400).
  2. OU: Os anos múltiplos de 4 são bissextos, EXCETO se forem também múltiplos de 100 (Ex: 1996, 2004, 2008, 2012 são bissextos. Já 1900 não é, pois é múltiplo de 100 mas não de 400).

Para testar múltiplos no PHP, usamos o operador matemático de módulo % (que nos dá o resto da divisão). Se $ano % 4 == 0, significa que a divisão por 4 é exata, logo, ele é múltiplo.

Criando o Script PHP Manualmente

Juntando nossa regra matemática com o IF E ELSE NO PHP e os operadores lógicos && (E) e || (OU), nosso código HTML + PHP fica assim:

<html>
<head>
    <title>Apostila PHP Progressivo</title>
</head>
<body>
    <!-- Formulário para o usuário digitar o ano -->
    <form action="" method="get">
        Digite o Ano (ex: 2024): <input type="number" name="year" required />
        <input type="submit" value="Testar" />
    </form> 

<?php 
    if(isset($_GET['year'])) {
        $ano = $_GET['year'];
        
        // A expressão mágica do ano bissexto
        if ( ($ano % 4 == 0 && $ano % 100 != 0) || $ano % 400 == 0 ) {
            echo "<p>O ano <b>$ano</b> É bissexto! (Fevereiro tem 29 dias)</p>";
        } else {
            echo "<p>O ano <b>$ano</b> NÃO é bissexto! (Fevereiro tem 28 dias)</p>";
        }
    }
?>
</body>
</html>

Preste muita atenção nos parênteses! Eles funcionam igualzinho na matemática da escola: garantem que o PHP resolva primeiro o bloco do && antes de comparar com o ||.

🧠 Matemática + Código te assusta?

Algoritmos clássicos como o do Ano Bissexto são figurinhas carimbadas em testes de emprego e provas de faculdade. O segredo não é decorar, é entender a lógica. Na nossa Apostila PHP Progressivo, você encontra dezenas de exercícios focados em desenvolver o seu raciocínio lógico, passo a passo, para estudar onde e quando quiser.

Baixar Apostila Completa →

O Jeito Sênior: Usando a Função Nativa do PHP

Fazer o algoritmo manual é excelente para treinar sua lógica de programação (e recomendo que você o faça!). Mas, no mundo corporativo do dia a dia, a regra número um é: não reinvente a roda.

O PHP já possui um gigantesco arsenal de funções prontas. Para trabalhar com datas, temos a poderosa FUNÇÃO DATE PHP. O parâmetro 'L' (maiúsculo) dessa função foi criado especificamente para verificar se um ano é bissexto. Ele retorna 1 (que vale como TRUE) se for, e 0 (que vale como FALSE) se não for.

Veja como o código fica absurdamente mais simples:

<?php 
    if(isset($_GET['year'])) {
        $ano = $_GET['year'];
        
        // mktime() cria um carimbo de data (timestamp) para o dia 1 de janeiro do ano digitado
        // date('L') avalia se o ano desse timestamp é bissexto
        $bissexto = date('L', mktime(0, 0, 0, 1, 1, $ano));
        
        if ($bissexto) {
            echo "<p>O ano $ano É bissexto! (Resolvido com função nativa)</p>";
        } else {
            echo "<p>O ano $ano NÃO é bissexto!</p>";
        }
    }
?>

💡 Dica de Mestre

Não se desespere se não entendeu a função mktime() agora. Iremos estudar manipulação avançada de datas e horas em um módulo específico mais adiante no nosso curso. O importante hoje é entender que no PHP, quase sempre existe uma função pronta para facilitar sua vida!


Sua lógica está ficando afiada! Que tal continuar evoluindo e dominar novas ferramentas do PHP?

Continuar Curso (Próxima Aula) »

Como Usar Operadores Lógicos no PHP (&&, ||, AND, OR, XOR, !)

🎯 O que você vai aprender nesta aula:

  • O que são e para que servem os operadores booleanos no PHP.
  • Como usar && (AND), || (OR), XOR e ! (NOT).
  • Pergunta de Entrevista: A diferença secreta entre usar && e a palavra AND.
  • Como criar condicionais curtas e eficientes (reduzindo linhas de código).

No desenvolvimento de aplicações web, raramente uma decisão depende de apenas uma única condição. Imagine um sistema de login: você precisa verificar se o usuário existe E se a senha está correta. É exatamente aqui que entram os superpoderes dos Operadores Lógicos.

O que são Operadores Lógicos no PHP?

Operadores lógicos (ou booleanos) no PHP são símbolos ou palavras-chave usados para combinar duas ou mais condições em uma única expressão. O PHP avalia essa combinação e retorna um único resultado final: TRUE (Verdadeiro) ou FALSE (Falso).

Eles são os melhores amigos das estruturas de decisão, como o IF E ELSE NO PHP. Vamos conhecer cada um deles detalhadamente.

1. Operador Lógico AND (E): &&

O operador AND (representado pelo símbolo && ou pela palavra AND) é extremamente rigoroso. Para que o resultado final seja verdadeiro, TODAS as condições envolvidas precisam ser verdadeiras.

Pense nele como um segurança de balada: "Você só entra se for maior de 18 anos E estiver com o ingresso". Faltou um dos dois? Você não entra.

<?php
    $maiorDeIdade = true;
    $temIngresso = false;
    
    // Como uma das variáveis é false, o resultado de && é FALSE
    if ($maiorDeIdade && $temIngresso) {
        echo "Pode entrar!";
    } else {
        echo "Acesso negado!"; // Esta linha será executada
    }
?>
  • (2 > 1) && (1 == 1) : TRUE (as duas são verdades).
  • (2 > 2) && (1 == 1) : FALSE (a primeira é falsa, pois 2 não é maior que 2).

2. Operador Lógico OR (OU): ||

O operador OR (representado por duas barras verticais || ou pela palavra OR) é bem mais flexível. Ele retorna TRUE se pelo menos uma das condições for verdadeira. Ele só vai retornar FALSE se absolutamente todas as opções forem falsas.

Exemplo do mundo real: "Você ganha frete grátis se for cliente VIP OU se a compra passar de R$ 200,00".

[Image of AND OR XOR logic gates diagram]
<?php
    $clienteVIP = false;
    $valorCompra = 250.00;
    
    // A primeira é falsa, mas a segunda é verdadeira. Logo, tudo vira TRUE!
    if ($clienteVIP || $valorCompra > 200.00) {
        echo "Parabéns, você ganhou Frete Grátis!";
    }
?>

3. Operador Lógico XOR (OR Exclusivo)

Esse é o operador "Diferentão". O XOR significa Exclusive OR. Ele retorna TRUE se, e somente se, apenas UMA das condições for verdadeira. Se ambas forem verdadeiras, ou se ambas forem falsas, ele retorna FALSE.

Quando usar isso? Imagine a tela de pagamento de um e-commerce. O usuário pode pagar com Cartão de Crédito XOR Boleto. Ele tem que escolher um, mas é impossível escolher os dois ao mesmo tempo para o mesmo pedido!

  • (2 > 1) XOR (1 == 2) : TRUE (só a primeira é verdade).
  • (2 > 1) XOR (1 == 1) : FALSE (ambas são verdadeiras, logo o XOR invalida).

🧠 A Lógica tá ficando complexa?

Entender operadores lógicos lendo é fácil; o desafio é aplicá-los na construção de sistemas reais. Se você quer dezenas de exercícios resolvidos passo a passo para treinar seu cérebro de programador, baixe agora a Apostila PHP Progressivo. Estude offline, sem distrações e com material focado na prática!

Baixar Apostila Completa →

4. Operador Lógico NOT (Negação): !

O operador NOT (representado pelo ponto de exclamação !) é o do contra. Ele simplesmente inverte o valor booleano da sua VARIÁVEL PHP. O que é TRUE vira FALSE, e vice-versa.

  • !FALSE : Vira TRUE.
  • !1 : Vira FALSE (pois 1, em programação, é considerado TRUE).
  • !'' : Vira TRUE (pois uma string vazia é considerada FALSE, e a exclamação a inverte).

🛠️ Dica de Ouro: Precedência (&& vs AND)

Você deve estar se perguntando: "Qual a diferença entre usar && ou escrever AND?". A resposta é: Precedência. Os símbolos &&, || e ! têm uma prioridade de execução muito maior no motor do PHP do que as palavras escritas. Para evitar bugs lógicos complexos de debugar (onde o PHP avalia a equação na ordem errada), acostume-se a usar sempre os símbolos && e || em seus projetos.

Exercício Prático: Sistema de Votação (Agrupando Lógica)

Lembra do nosso exercício da aula de IF E ELSE ANINHADOS? Vamos refazê-lo agora de uma forma muito mais profissional, usando menos linhas de código graças aos operadores lógicos.

A Regra do Sistema: Crie um sistema Web que pergunte a idade do usuário.

  • Menor de 16 anos: Não pode votar.
  • Entre 16 e 17 anos: Facultativo.
  • Entre 18 e 65 anos: Obrigatório.
  • Acima de 65 anos: Facultativo.

A Solução Limpa com o Operador OR (||)

Repare que temos duas faixas de idade diferentes onde o voto é facultativo. Em vez de escrever dois IFs diferentes, vamos agrupar tudo usando o || (OU)!

<html>
<head>
    <title>Apostila PHP Progressivo</title>
</head>
<body>
    <form action="" method="get">
        Sua idade: <input type="number" name="age" required />
        <input type="submit" value="Testar" />
    </form> 

<?php 
    // Verifica se a idade foi enviada
    if(isset($_GET['age'])) {
        $idade = $_GET['age'];
        
        if ($idade < 16) {
            echo "Você ainda não pode votar.";
            
        } elseif ($idade < 18 || $idade > 65) {
            // LÓGICA MÁGICA AQUI!
            // Se ele for menor de 18 OU maior que 65, entra nessa condição.
            echo "Seu voto é facultativo.";
            
        } else {
            // Se não caiu em nenhuma das regras acima, só sobrou quem tem entre 18 e 65
            echo "Seu voto é OBRIGATÓRIO.";
        }
    }
?>
</body>
</html>

Viu como os operadores lógicos deixam nosso código elegante? Agrupamos expressões e poupamos o servidor de processamentos desnecessários.


Impulsione sua Carreira com um Certificado!

Você sabia que empresas valorizam profissionais que conseguem comprovar o que sabem? Nosso curso possui certificação válida para faculdades e currículos.

Curso de PHP com certificado
★ Obter meu certificado de Programador PHP!

Como Achar os Dias do Mês com SWITCH em PHP (Exercício Resolvido)

🎯 O que você vai aprender nesta aula:

  • Como substituir dezenas de IF/ELSE por um código mais limpo.
  • O poder do agrupamento de blocos no comando SWITCH.
  • Como usar a ausência do break a seu favor (truque de lógica ninja).
  • Receber dados de um formulário HTML e processá-los no servidor.

No desenvolvimento de sistemas, muitas vezes precisamos criar scripts que tomam decisões com base em datas. Neste tutorial prático do nosso curso de PHP, vamos resolver um problema clássico: descobrir quantos dias tem um mês específico, usando apenas a sua lógica e o COMANDO SWITCH.

Como calcular os dias de um mês usando PHP?

Para calcular os dias de um mês em PHP de forma eficiente, usamos a estrutura de controle SWITCH. Em vez de criar múltiplos blocos IF/ELSE, o SWITCH avalia a variável do mês (de 1 a 12) e direciona o fluxo do código diretamente para o bloco correspondente, retornando 28, 30 ou 31 dias.

O desafio de hoje é simples: crie uma página WEB onde o usuário digita um número de 1 a 12 (representando o mês), e o seu servidor PHP deve retornar o número exato de dias daquele mês. Para este exercício de lógica, vamos desconsiderar os anos bissextos, ok?

Nossa regra de negócios (o que sabemos do mundo real):

  • 31 dias: Janeiro (1), Março (3), Maio (5), Julho (7), Agosto (8), Outubro (10) e Dezembro (12).
  • 30 dias: Abril (4), Junho (6), Setembro (9) e Novembro (11).
  • 28 dias: Fevereiro (2).

A solução amadora (Não faça isso!)

Se você vem da nossa aula de ESTRUTURA IF E ELSE, sua primeira intuição pode ser fazer uma tripa gigante de condições. Usando o switch de forma básica, ficaria assim:

case 1:
    echo "31 dias";
    break;
case 2:
    echo "28 dias";
    break;
// ... e assim por diante até o case 12

Isso funciona? Sim. É profissional? Nem um pouco! O código fica longo, repetitivo e terrível de dar manutenção.

Agrupando Cases: O Script PHP Otimizado

Lembra que aprendemos que, se você não usar a palavra break, o PHP vai executando os cases de baixo como uma cachoeira? Podemos usar essa funcionalidade a nosso favor para agrupar meses que possuem o mesmo número de dias!

Veja como o código fica absurdamente mais limpo. Vamos receber o dado via $_GET e testar:

<html>
<head>
    <title>Apostila PHP Progressivo</title>
</head>
<body>
    <!-- Formulário HTML enviando dados via GET -->
    <form action="" method="get">
        Mês (1 a 12): <input type="number" name="month" min="1" max="12" required />
        <input type="submit" value="Testar" />
    </form> 

<?php 
    // Verifica se o usuário enviou o formulário
    if(isset($_GET['month'])) {
        $mes = $_GET['month'];
        
        switch($mes){
            // Meses com 31 dias agrupados
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                echo "O mês $mes tem 31 dias.";
                break; // Aqui o código para!
            
            // Meses com 30 dias agrupados
            case 4: case 6: case 9: case 11:
                echo "O mês $mes tem 30 dias.";
                break;   
            
            // Fevereiro, o diferentão
            case 2:
                echo "O mês $mes tem 28 dias.";
                break;
            
            // Se o usuário burlar o HTML e digitar 99
            default:
                echo "Mês inexistente!";
        }
    }
?>
</body>
</html>

Bem melhor, concorda? Agrupamos a lógica e reduzimos nosso script pela metade!

🧠 Travou na Lógica?

Aprender lógica de programação requer prática. O segredo não é decorar comandos, é resolver problemas. Na nossa Apostila PHP Progressivo, você encontra dezenas de exercícios resolvidos passo a passo, exatamente como este, para você estudar offline no seu próprio ritmo.

Baixar Apostila Completa →

O "Truque" da Acumulação: Lógica Ninja

Não se assuste se você passar horas programando um script longo, e aí vem um colega e resolve o mesmo problema com pouquíssimas linhas. Faz parte do jogo!

Vamos elevar o nível e fazer um exercício mental pesado agora. O objetivo aqui não é criar o código mais legível do mundo, mas sim explodir sua mente sobre como o fluxo do switch funciona.

Vamos usar uma técnica de acumulação matemática. Pense comigo:

  1. Todo mês tem pelo menos 28 dias. Então vamos inicializar $dias = 0 e, lá no fim, sempre somar 28.
  2. Alguns meses têm 30 dias (ou seja, 28 + 2).
  3. Outros meses têm 31 dias (ou seja, 28 + 2 + 1).

E se tirarmos TODOS os comandos break e deixarmos o PHP somar as variáveis em cascata? Veja esse código "chuchu-beleza":

<?php 
    $mes = $_GET['month'];
    $dias = 0; // Inicializa a variável
    
    switch($mes){
        // Caso 31 dias (cai aqui, soma 1, e CONTINUA descendo)
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            $dias = $dias + 1; // Ou simplesmente: $dias += 1;
            
        // Caso 30 dias (cai aqui ou vem lá de cima, soma 2, e CONTINUA descendo)
        case 4: case 6: case 9: case 11:
            $dias = $dias + 2;
            
        // Caso Fevereiro (cai aqui ou vem lá de cima, soma 28, e TERMINA)
        case 2:
            $dias = $dias + 28;
    }
    
    echo "O mês $mes possui $dias dias.";
?>

Como esse código maluco funciona?

Se o usuário digitar o mês 1 (Janeiro):

  • O PHP entra na primeira linha. Faz 0 + 1 = 1.
  • Como não tem break, ele desce. Faz 1 + 2 = 3.
  • Continua descendo. Faz 3 + 28 = 31. Resultado final: 31!

Se o usuário digitar 4 (Abril):

  • Ele ignora a primeira parte, e entra direto no segundo bloco.
  • Faz 0 + 2 = 2.
  • Desce, e faz 2 + 28 = 30. Resultado final: 30!

⚠️ Aviso de Sênior: Lógica vs Manutenção

O código acima é fantástico para treinar sua inteligência em algoritmos, mas evite usá-lo em projetos reais. Códigos super "espertinhos" são difíceis de ler por outros programadores. No mundo real, usaríamos a função nativa do PHP cal_days_in_month() ou arrays. Escreva sempre códigos claros!


Curtiu o desafio de lógica?

Na próxima aula, vamos dar um tempo de estruturas de decisão e entrar no mundo dos Laços de Repetição. Prepare-se para dominar o WHILE e o FOR!

Continuar Curso (Próxima Aula) »

Mega Pack: Todas as Apostilas do Projeto Progressivo

Mega Pack Projeto Progressivo

O arsenal completo para quem quer se tornar um programador profissional.

Já imaginou ter os melhores, maiores e mais completos materiais para estudar programação reunidos em um só lugar? Nada de comprar livros de centenas de reais, em inglês, de autores diferentes ou que não te ensinam do jeito correto.

Com o Mega Pack Projeto Progressivo, você vai ter acesso a estas 7 apostilas completíssimas, que abrangem tudo no mundo da programação:

Mega Pack Projeto Progressivo

Preço Promocional Especial

R$ 140,00
R$ 69,99

(Apenas R$ 10,00 por apostila!)


Pagar pelo PagSeguro (Cartão, Boleto ou PIX):

Pague com PagSeguro

Pagar pelo PayPal:

Pessoal, dá 10 reais por apostila. Isso mesmo. Apenas R$ 10,00 por apostila.

Garanto que será o melhor e mais barato investimento da sua vida. Duvida? Estude pelas apostilas, se elas não te tornarem um(a) programador profissional, só avisar que estornamos seu dinheiro imediatamente.

O risco é todo meu.

Understanding PHP Operator Precedence and Associativity (With Examples)

Understanding PHP Operator Precedence (The Order of Operations)

To master backend development, you must understand PHP operator precedence. When you write a complex expression, how does the PHP engine know which part to calculate first?

Consider this simple question: What is the result of 1 + 2 * 3?

If you process the addition first, you get 9. If you process the multiplication first, you get 7. In grade school, you probably learned the acronym PEMDAS (Parentheses, Exponents, Multiplication/Division, Addition/Subtraction).

Computers are machines of absolute precision. They cannot guess your intentions. To ensure that 1 + 2 * 3 always results in 7 across every server in the world, programming languages use strict rules called Operator Precedence.

The PHP Operator Precedence Table

PHP has dozens of operators, and they are all ranked in a hierarchy. The engine will always evaluate the operators at the top of the hierarchy first. Here is a simplified cheat sheet of the most common operators, from highest to lowest priority:

Operator Description
( ) Parentheses (Highest Priority)
++ -- Increment / Decrement
! Logical NOT
* / % Multiplication, Division, Modulo
+ - . Addition, Subtraction, String Concatenation
< <= > >= Comparison
== != === !== Equality and Strict Identity
&& || Logical AND / OR
= += -= *= Assignment (Lowest Priority)

You don't need to memorize this entire table today. As you follow along with our Progressive PHP Course, these rules will become second nature.

What is Associativity? (Handling Ties)

What happens when two operators in the same expression have the exact same precedence level? For example, 10 - 5 + 2. Both subtraction and addition are on the same tier.

This is where Associativity comes in. Associativity dictates the direction in which the expression is evaluated.

  • Left-to-Right: Most operators in PHP are evaluated from left to right. So, 10 - 5 + 2 becomes (10 - 5) + 2, resulting in 7.
  • Right-to-Left: Assignment operators (=) are evaluated from right to left. This is a brilliant feature because it allows chaining!
<?php
    // Right-to-Left Associativity Example
    $a = $b = $c = 100;
    
    // How PHP reads it:
    // 1. $c becomes 100
    // 2. $b becomes the value of $c (100)
    // 3. $a becomes the value of $b (100)
    
    echo $a; // Outputs: 100
?>

The Power of Parentheses: Best Practices

Looking at the table above, parentheses () hold the ultimate power. They bypass all standard precedence rules, forcing the engine to calculate whatever is inside them first.

However, parentheses aren't just for math; they are a tool for code readability.

💡 Senior Developer Tip: Explicit over Implicit

Even if you know the precedence table by heart, the next developer reading your code might not. Whenever you combine multiple operators (like logic and math), use parentheses to make your intentions explicit. It takes zero extra server performance and prevents nasty bugs.

Example: Calculating an Average

A classic beginner mistake is trying to calculate an average without overriding the division priority.

<?php
    $grade1 = 7;
    $grade2 = 9;

    // WRONG: PHP divides $grade2 by 2 first, then adds $grade1 (Result: 11.5)
    $average = $grade1 + $grade2 / 2; 

    // CORRECT: PHP adds the grades first, then divides the total (Result: 8)
    $average = ($grade1 + $grade2) / 2;
    
    echo "The final average is: " . $average;
?>

Advanced Warning: The `&&` vs `and` Gotcha!

Here is an advanced concept that frequently appears in technical interviews. PHP has two ways to write the logical "AND" operator: && and the word and. They do the same thing, but they have different precedence levels!

  • && has a higher precedence than the assignment operator =.
  • and has a lower precedence than the assignment operator =.

Look at how this drastically changes the result:

<?php
    // Example 1 using &&
    $result1 = true && false;
    // Evaluates as: $result1 = (true && false)
    // $result1 is FALSE
    
    // Example 2 using 'and'
    $result2 = true and false;
    // Evaluates as: ($result2 = true) and false
    // $result2 is TRUE! The variable grabs the first value before the 'and' triggers.
?>

Best Practice: Always stick to && and || in modern PHP development to avoid this unexpected behavior.


Next Step: Putting Logic into Action

Now that you understand operators and precedence, it's time to build applications that can actually make decisions. In the next tutorial, we will explore Control Structures: PHP If, Else, and Elseif Statements.

Go to the Next Lesson in the Syllabus →

How to Build a Simple PHP Calculator (With Line-by-Line Code Explanation)

Progressive PHP Full Course

⚙️ Your First Interactive PHP Project

In our previous modules, we learned about PHP Math Operators and Handling User Input. Today, we are going to combine these two fundamental concepts to build something real: a functional PHP Calculator. Instead of just giving you the final code, we will explain exactly how the frontend and backend talk to each other.

Explore the Full PHP Syllabus →

The Goal: Building a PHP Arithmetic Calculator

"Write a PHP script that receives two numbers from a user via an HTML form and calculates: the sum, the difference, the product, the quotient (division), and the remainder (modulo)."

Step-by-Step Code Explanation

To build this application properly, we need to understand the three distinct layers of our software. Let's break down the logic before looking at the final file.

1. The HTML Form (The Interface)

First, we need a way for the user to type their numbers. We use standard HTML for this.

<form action="home.php" method="GET">
    <input type="number" name="num1" step="any" required>
    <input type="number" name="num2" step="any" required>
    <input type="submit" value="Calculate">
</form>
  • action="home.php": This tells the browser to send the typed data to our PHP file named home.php.
  • method="GET": This sends the data through the URL, which is perfect for a simple calculator.
  • type="number" and step="any": This is a great UX (User Experience) practice. It forces the browser to only accept numbers (including decimals), preventing users from typing letters.

2. Capturing Data Securely (The Backend Bridge)

Once the user clicks "Calculate", PHP takes over. But what happens if the user visits the page for the very first time, before submitting any form? PHP would try to calculate numbers that don't exist yet, causing an error!

if(isset($_GET['num1']) && isset($_GET['num2'])) {
    $num1 = (float)$_GET['num1'];
    $num2 = (float)$_GET['num2'];
}
  • isset(): This is a built-in PHP function. It translates to: "Does this data exist?" We use it to wrap our logic so the math only happens IF the user actually submitted the form.
  • (float): This is called Type Casting. Even though the HTML field is a "number", everything sent via HTTP is technically text. By placing (float) before our variable, we forcefully convert the text into a decimal number, making our application much safer against malicious inputs.

3. Processing and Concatenating Data

Now that we have safe, clean numbers stored in $num1 and $num2, we need to do the math and display it.

echo "Addition: " . ($num1 + $num2) . "<br>";
  • The Dot (.): In PHP, the dot is used to glue (concatenate) strings and variables together.
  • Parentheses ($num1 + $num2): These are mandatory! They tell the PHP engine: "Hey, do the mathematical calculation inside these brackets first, and only then attach the result to the word 'Addition'."

The Complete Source Code (home.php)

Now that you understand the mechanics, create a file named home.php in your local server and paste the complete code below to see it in action.

<!DOCTYPE html>
<html>
<head>
    <title>My PHP Calculator</title>
</head>
<body style="font-family: Arial, sans-serif; margin: 40px;">

    <h2>PHP Math Calculator</h2>
    
    <form action="home.php" method="GET">
        <label>Number 1:</label>
        <input type="number" name="num1" step="any" required><br><br>
        
        <label>Number 2:</label>
        <input type="number" name="num2" step="any" required><br><br>
        
        <input type="submit" value="Calculate" style="padding: 10px 20px; cursor: pointer;">
    </form>
    
    <hr style="margin: 30px 0;">

    <?php 
        // Ensure the form was submitted
        if(isset($_GET['num1']) && isset($_GET['num2'])) {
            
            // Capture and sanitize inputs
            $num1 = (float)$_GET['num1'];
            $num2 = (float)$_GET['num2'];
            
            echo "<h3>Results:</h3>";
            
            // Output calculations
            echo "Addition: " . ($num1 + $num2) . "<br>";
            echo "Subtraction: " . ($num1 - $num2) . "<br>";
            echo "Multiplication: " . ($num1 * $num2) . "<br>";
            
            // Prevent Division by Zero Error
            if($num2 != 0) {
                echo "Division: " . ($num1 / $num2) . "<br>";
                echo "Modulo (Remainder): " . ($num1 % $num2) . "<br>";
            } else {
                echo "<span style='color: red; font-weight: bold;'>Error: You cannot divide by zero!</span><br>";
            }
        }
    ?>

</body>
</html>

💡 Expert Tip: Anticipate Errors (Division by Zero)

A good programmer doesn't just write code that works; they write code that doesn't break. In mathematics, dividing a number by zero is impossible. If a user types 0 in the second field and your PHP script tries to divide by it, PHP 8+ will throw a Fatal Error: Uncaught DivisionByZeroError and crash your entire application. That is why we wrapped the division block inside an if($num2 != 0) safety check!

Did you get your calculator running? Challenge: Try adding a third input field to calculate the average of three numbers! Post your updated code in the comments below.


Next Step: Controlling the Flow

You've just built an app that makes a decision (checking if the divisor is zero). This is called conditional logic. In the next module, we will dive deep into PHP If, Else, and Elseif Statements to give your applications true artificial intelligence!

Go to the Next Lesson in the Syllabus →

How to Handle HTML Forms and User Input in PHP ($_GET & $_POST)

The Concept of User Input in Web Development

Think about the actions you perform on the internet every single day:

  • When you type your username and password, the server checks those credentials and grants you access. If they are wrong, it returns an error message.
  • When you search for a product on Amazon, the website reads your search query and returns only the relevant database results.
  • When you try to transfer money, the banking system checks if your input amount is lower than your current balance before approving the transaction.

All of these scenarios rely on a fundamental concept: Client-Server Communication. The Client (your web browser) collects data from the user and sends it to the Server. The Server (running PHP) catches this data, processes it according to your business logic, and sends back a response.

Today, we are going to learn how to build that bridge.

Step 1: Creating the HTML Form

Everything starts on the frontend. To send data to PHP, we need an HTML <form>. The form tag has two crucial attributes you must memorize:

  • action: Tells the browser where to send the data (e.g., "process.php").
  • method: Tells the browser how to send the data (usually "GET" or "POST").
<!-- The HTML Form -->
<form action="home.php" method="GET">
    <label for="username">Enter your name:</label>
    <!-- The 'name' attribute is EXTREMELY important. PHP uses it as the key. -->
    <input type="text" id="username" name="user_name" required>
    
    <input type="submit" value="Send Data">
</form>

Step 2: Capturing Data with PHP Superglobals

Once the user clicks "Send Data", PHP wakes up. To grab the information, PHP uses built-in variables called Superglobals. These are special Arrays that are always available in all scopes throughout your script.

Because our form used method="GET", PHP will automatically store the typed data inside the $_GET superglobal array. To retrieve it, we use the name attribute we defined in the HTML input (which was user_name).

<?php 
    // This is how PHP captures the data
    $captured_name = $_GET["user_name"];
    
    echo "Welcome to the system, " . $captured_name;
?>

The Complete Working Example

Let's put both the HTML and the PHP in the same file (let's call it home.php). We will also add a critical safety check using the isset() function. This prevents PHP from throwing an error when you visit the page for the first time (before the form is submitted).

<!DOCTYPE html>
<html>
<head>
    <title>PHP Form Tutorial</title>
</head>
<body>

    <h2>Test out PHP Input!</h2>
    <form action="home.php" method="GET">
        <label>Type something:</label>
        <input type="text" name="my_input">
        <input type="submit" value="Send to PHP">
    </form>
    
    <hr>

    <?php 
        // Check if the form was actually submitted
        if (isset($_GET["my_input"])) {
            // It's good practice to sanitize data (prevent XSS hacks)
            $safe_data = htmlspecialchars($_GET["my_input"]);
            echo "<h3>PHP Received: " . $safe_data . "</h3>";
        }
    ?>

</body>
</html>

Understanding GET vs. POST

You might be wondering: what happens if I change the form method to POST? How does PHP handle it?

  • The GET Method: When you use GET, the browser appends the form data directly into the URL (e.g., home.php?my_input=Hello). This is fantastic for search bars or filtering products because users can bookmark or share the URL. However, never use GET for passwords, as everyone can see the data in the address bar.
  • The POST Method: When you use POST, the data is sent invisibly within the HTTP request body. The URL remains clean (e.g., home.php). This is mandatory for login forms, credit card checkouts, and sending large amounts of text. To capture it, you simply change your PHP code to use $_POST["my_input"].

🚧 Common Error: "Undefined array key"

If you get a warning saying "Warning: Undefined array key 'my_input'", it means PHP tried to read the data before the user clicked the submit button, OR you made a typo in the HTML name attribute. Always wrap your capturing logic inside an if (isset($_GET['...'])) block to ensure the data actually exists!

Were you able to make PHP repeat your text? Try adding a second input field (like "Age") and printing both values! Drop your code in the comments below.


Next Step: Making Decisions

Now that you can capture user input, we need to teach our application how to make choices based on that data. In the next tutorial, we will dive into PHP IF/ELSE Statements (Conditional Logic) to build our very first login verification system.

Go to the Next Lesson in the Syllabus →

How to Use PHP Arithmetic Operators: Math Calculations Explained

What are PHP Arithmetic Operators?

In programming, an operator is a symbol that tells the compiler or interpreter to perform a specific mathematical, relational, or logical operation. PHP provides a built-in set of arithmetic operators that function exactly like the buttons on a calculator.

If you have already learned how to store data from our previous lesson on PHP variables (INSERT LINK HERE FOR PHP VARIABLES TUTORIAL), you are ready to start manipulating that data.

1. The Addition Operator: +

The addition operator (+) is used to sum two numbers. It is incredibly straightforward.

<?php
    echo 15 + 5; // Output: 20

    $base_price = 100;
    $shipping_fee = 15;
    $total = $base_price + $shipping_fee;
    
    echo "Total to pay: $" . $total; // Output: Total to pay: $115
?>

⚠️ Pro Tip: In languages like JavaScript, the + symbol is also used to join text (concatenate strings). Not in PHP! In PHP, math is math. To join strings, we use the dot (.) operator.

2. The Subtraction Operator: -

The subtraction operator (-) finds the difference between two values. It is heavily used in date calculations and inventory management.

<?php
    $current_year = 2026;
    $birth_year = 1995;
    
    $age = $current_year - $birth_year;
    echo "The user is $age years old."; // Output: The user is 31 years old.
?>

3. The Multiplication Operator: *

In computer science, we do not use "x" or a dot for multiplication. We use the asterisk (*).

<?php
    $item_price = 50;
    $quantity = 3;
    
    $subtotal = $item_price * $quantity;
    echo "Subtotal: $" . $subtotal; // Output: Subtotal: $150
?>

4. The Division Operator: /

For division, PHP uses the forward slash (/).

A great feature of PHP is its intelligent type juggling. If you divide two integers and the result is a whole number, PHP returns an Integer. If there is a fractional remainder, PHP automatically converts the result into a Float (decimal).

<?php
    echo 10 / 2; // Output: 5 (Integer)
    echo 10 / 3; // Output: 3.3333333333333 (Float)
?>

5. The Modulo Operator (Remainder): %

This is often the most confusing operator for beginners, but it is one of the most powerful tools in a programmer's arsenal. The modulo operator (%) does not divide the numbers; it performs a division and returns only the remainder.

[Image of parts of a long division: dividend, divisor, quotient, remainder]

The modulo operator specifically grabs the "Remainder" at the bottom of the division.

<?php
    echo 10 % 2; // Output: 0 (10 divided by 2 is 5, with exactly 0 remaining)
    echo 10 % 3; // Output: 1 (10 divided by 3 is 3, with 1 remaining)
?>

Why is Modulo so important?

Modulo is universally used in programming to check if a number is even or odd. If a number is even, $number % 2 will always return 0. If it is odd, it will return 1. You will use this logic frequently to create alternating row colors in HTML tables (Zebra striping) or to distribute tasks evenly in algorithms.

6. The Exponentiation Operator: **

Introduced in modern PHP, the double asterisk (**) allows you to raise a number to the power of another easily, without needing to call complex math functions.

<?php
    echo 2 ** 3; // This means 2³ (2 * 2 * 2). Output: 8
    echo 5 ** 2; // This means 5² (5 * 5). Output: 25
?>

🚧 Common Errors and Best Practices

  • DivisionByZeroError: In mathematics, you cannot divide a number by zero. If you try to run echo 10 / 0;, your PHP application will crash and throw a fatal error. Always ensure your divisor is not zero before calculating!
  • Operator Precedence (PEMDAS): PHP follows the standard order of operations. Multiplication and division are executed before addition and subtraction. For example, 2 + 3 * 5 results in 17, not 25. If you want the addition to happen first, use parentheses: (2 + 3) * 5.

Ready for the Next Challenge?

Now that you can calculate values, you need to learn how to assign them efficiently and compare them to make logical decisions. Join us in the next lesson to master Assignment and Comparison Operators!

Go to the Next Lesson in the Syllabus →

Veja também: