Aulab Criar conta grátis
Para aprender

If e else em PHP: condicionais explicadas do zero

Atualizado em 30 de agosto de 2026

Em PHP, if executa um trecho de código somente quando a condição entre parênteses é verdadeira, e else cobre o caso contrário — o que fazer quando a condição é falsa. É com esses dois que um programa deixa de ser uma lista de instruções fixas e passa a tomar decisões: liberar ou não a compra, aprovar ou mandar para recuperação, aplicar ou não o desconto.

A estrutura é sempre a mesma: você escreve uma pergunta que só admite sim ou não, e diz o que fazer em cada caso. "A idade é 18 ou mais?" "A média chegou a 7?" "O valor da compra passou de R$ 100,00?" O PHP avalia a pergunta, chega a verdadeiro ou falso, e escolhe o caminho.

Este guia cobre a sintaxe com a nomenclatura certa, os operadores de comparação numa tabela, a diferença entre == e === que já custou noite de sono a muita gente, o elseif para quando há mais de dois caminhos, as condições compostas com && e || e o erro de digitação mais traiçoeiro da linguagem. Se você ainda não está confortável com variáveis em PHP, comece por lá — condicional sem variável não tem o que comparar.

A sintaxe: condição, bloco e fechamento

<?php

$idade = 16;

if ($idade >= 18) {
    echo "Pode tirar a habilitação.\n";
} else {
    echo "Ainda não pode tirar a habilitação.\n";
}

Saída:

Ainda não pode tirar a habilitação.

Peça por peça:

  • if é a palavra que inicia a decisão.
  • Entre parênteses vem a condição, uma comparação que resulta em verdadeiro ou falso.
  • A chave que abre inicia o bloco: tudo que estiver dentro dele só roda se a condição for verdadeira.
  • A chave que fecha é o fechamento do bloco.
  • else abre um segundo bloco, que roda exatamente quando a condição foi falsa.

Duas observações que economizam tempo. Primeira: a linha do if não termina em ponto e vírgula — quem escreve if ($idade >= 18); cria um bloco vazio, e a decisão passa a não valer nada. Segunda: o else é opcional. Se não há nada a fazer no caso falso, use só o if.

A indentação — os espaços antes das linhas de dentro do bloco — não muda o funcionamento, mas muda tudo na hora de ler. Programa de iniciante sem indentação é onde os erros se escondem.

Operadores de comparação

São estes os que você vai usar no dia a dia:

Operador Significa Exemplo verdadeiro
== Igual em valor (ignora o tipo) "7" == 7
=== Igual em valor e em tipo 7 === 7
!= Diferente em valor 5 != 8
!== Diferente em valor ou em tipo "7" !== 7
> Maior que 10 > 3
< Menor que 3 < 10
>= Maior ou igual a 6 >= 6
<= Menor ou igual a 4 <= 9

Note que >= e <= incluem o próprio valor. Numa regra de aprovação com média 6, usar >= 6 aprova quem tirou exatamente 6; usar > 6 reprova essa pessoa. É um caractere de diferença e uma reclamação na secretaria.

Cuidado com == e ===

O == compara só o valor e, para isso, converte os tipos quando eles são diferentes. O === compara valor e tipo, sem converter nada. Na prática:

<?php

$notaDigitada = "7";

if ($notaDigitada == 7) {
    echo "Com == a comparação deu verdadeira.\n";
}

if ($notaDigitada === 7) {
    echo "Com === a comparação deu verdadeira.\n";
} else {
    echo "Com === a comparação deu falsa.\n";
}

Saída:

Com == a comparação deu verdadeira.
Com === a comparação deu falsa.

Por que isso importa: tudo que chega de um formulário chega como texto. O aluno digita 7 no campo de nota e o PHP recebe "7", com aspas. Com == a comparação funciona; com === ela falha, mesmo o número parecendo certo na tela. A recomendação para quem está começando: use === como padrão, porque ele é previsível, e converta o texto para número explicitamente antes de comparar. Comparação que "às vezes funciona" é a pior espécie de bug.

Quando há mais de dois caminhos: elseif

Aprovado, recuperação e reprovado são três caminhos, e dois blocos não bastam. Entra o elseif:

<?php

$media = 6.5;

if ($media >= 7) {
    echo "Aprovado\n";
} elseif ($media >= 5) {
    echo "Recuperação\n";
} else {
    echo "Reprovado\n";
}

Saída:

Recuperação

O PHP testa as condições de cima para baixo e para na primeira verdadeira. Com média 6,5, a primeira condição falha, a segunda passa, o bloco da recuperação roda e o else é ignorado. Só um dos blocos roda, sempre.

Justamente por isso a ordem é decisiva. Se você inverter e colocar $media >= 5 primeiro, quem tirou 9 cai na recuperação — porque 9 também é maior ou igual a 5, e o PHP para ali. Em cadeia de faixas, escreva sempre da condição mais restritiva para a mais ampla.

Condições compostas com && e ||

Quando a decisão depende de mais de uma coisa, você junta as comparações. O && significa "e": as duas precisam ser verdadeiras. O || significa "ou": basta uma ser verdadeira.

Uma promoção que dá 10% para compras acima de R$ 100,00 apenas para clientes cadastrados:

<?php

$valorCompra = 130.00;
$clienteCadastrado = true;

if ($valorCompra > 100 && $clienteCadastrado) {
    $desconto = $valorCompra * 0.10;
    $valorFinal = $valorCompra - $desconto;
    echo "Desconto de R$ " . number_format($desconto, 2, ',', '.') . "\n";
    echo "Total a pagar: R$ " . number_format($valorFinal, 2, ',', '.') . "\n";
} else {
    echo "Total a pagar: R$ " . number_format($valorCompra, 2, ',', '.') . "\n";
}

Saída:

Desconto de R$ 13,00
Total a pagar: R$ 117,00

Se o cliente não estivesse cadastrado, ou se a compra fosse de R$ 80,00, a condição inteira já seria falsa e o programa cairia no else. Repare também que $clienteCadastrado aparece sozinho na condição: ele já é verdadeiro ou falso, então não precisa comparar com nada. Escrever $clienteCadastrado == true funciona, mas é redundante.

Agora o "ou", numa regra de funcionamento da loja:

<?php

$diaSemana = "sábado";

if ($diaSemana === "sábado" || $diaSemana === "domingo") {
    echo "Loja fechada.\n";
} else {
    echo "Loja aberta.\n";
}

Saída:

Loja fechada.

Um detalhe que pega todo iniciante: é preciso repetir a variável dos dois lados. if ($diaSemana === "sábado" || "domingo") parece certo em português e está errado em PHP — o segundo pedaço vira uma condição solta que é sempre verdadeira, e a loja fecha todo dia.

O erro clássico: = no lugar de ==

Um sinal de igual guarda um valor; dois sinais comparam. Trocar um pelo outro dentro de um if gera um programa que roda sem reclamar e responde errado:

<?php

$idade = 15;

if ($idade = 18) {
    echo "Maior de idade\n";
}

echo "Idade agora: $idade\n";

Saída:

Maior de idade
Idade agora: 18

Duas coisas ruins aconteceram de uma vez. A condição guardou 18 dentro de $idade, destruindo o valor original, e depois considerou o resultado dessa atribuição como verdadeiro — então o bloco rodou mesmo com a pessoa tendo 15 anos. Nenhum erro apareceu na tela. Sempre que um if seu entrar em todos os casos, olhe primeiro se não falta um sinal de igual ali.

É esse tipo de erro que fica invisível para quem estuda sozinho: o programa roda, imprime alguma coisa e passa a impressão de estar certo. Em turma, o professor bate o olho e devolve o exercício com o comentário. É assim que funciona no Aulab — o aluno resolve o exercício num editor de PHP que roda no navegador, envia, e o professor aprova ou devolve para refazer com a observação do que ajustar. Para condicionais, em que o código quase sempre roda mesmo errado, essa devolutiva vale mais do que uma nota.

Quando você estiver seguro com if, elseif e else, o próximo degrau natural são os laços de repetição com while e for — que, aliás, usam exatamente as mesmas condições que você acabou de aprender aqui.

Perguntas frequentes

Como funciona o if em PHP?

O if avalia a condição entre parênteses. Se o resultado for verdadeiro, o bloco entre chaves logo abaixo é executado; se for falso, esse bloco é pulado. O else é opcional e define o que fazer no caso falso.

Qual a diferença entre == e === em PHP?

O == compara apenas o valor e converte os tipos quando eles são diferentes, então "7" == 7 é verdadeiro. O === compara valor e tipo sem converter nada, então "7" === 7 é falso. Para quem está começando, usar === como padrão evita surpresas.

Quando usar elseif em vez de vários if?

Use elseif quando os casos forem mutuamente exclusivos, como faixas de nota, porque o PHP para na primeira condição verdadeira e garante que só um bloco rode. Vários if separados são testados todos, um a um, e podem executar mais de um bloco sem querer.

Qual a diferença entre && e || em PHP?

O && exige que as duas condições sejam verdadeiras ao mesmo tempo. O || exige que pelo menos uma seja verdadeira. Em ambos os casos é preciso escrever a comparação completa dos dois lados, repetindo a variável.

Por que meu if entra sempre, mesmo com a condição falsa?

Na maioria das vezes é um sinal de igual faltando: if ($idade = 18) guarda 18 na variável em vez de comparar, e o resultado disso é considerado verdadeiro. Confira também se não há ponto e vírgula logo após o parênteses do if, o que cria um bloco vazio.

Leia também

Sua turma inteira num lugar só

Poste aulas e exercícios, corrija com devolutiva e acompanhe o progresso de cada aluno — o Aulab reúne tudo isso numa turma só.