Condicionais
Um programa não segue apenas um caminho único — ele precisa realizar diferentes ações em diferentes condições. “Se o usuário estiver conectado, mostre o perfil dele; caso contrário, mostre um botão de login” — essa é a essência da lógica condicional.
1. A instrução if
A forma mais simples de tomada de decisão: executar um bloco de código quando uma condição for true.
<?php
$score = 85;
if ($score >= 60) {
echo "You passed!";
}
?>
if do () é, em última instância, convertida em um valor booleano. Strings vazias, 0, "0", null e matrizes vazias são todas false — todo o restante é true. (Revise as regras de conversão booleana da Lição 4.)
2. Instrução if...else
Um caminho quando a condição for verdadeira, outro quando for falsa:
<?php
$age = 16;
if ($age >= 18) {
echo "Welcome!";
} else {
echo "Minors are not allowed.";
}
?>
3. if...elseif...else — Ramificações múltiplas
<?php
$score = 85;
if ($score >= 90) {
echo "Excellent";
} elseif ($score >= 80) {
echo "Good";
} elseif ($score >= 70) {
echo "Average";
} elseif ($score >= 60) {
echo "Pass";
} else {
echo "Fail";
}
?>
elseif (uma palavra), embora else if (duas palavras) também funcione. Ambas produzem o mesmo resultado, mas elseif é a forma oficialmente recomendada.
4. A instrução switch
Quando há muitos ramos de correspondência exata, switch fica mais claro do que uma longa sequência de if/elseif:
<?php
$day = "Wednesday";
switch ($day) {
case "Monday":
echo "A new week begins!";
break;
case "Friday":
echo "Weekend is almost here!";
break;
case "Saturday":
case "Sunday":
echo "Enjoy your weekend!";
break;
default:
echo "Keep pushing through the workweek!";
}
?>
| Matéria | Notas |
|---|---|
case |
O valor a ser comparado — utiliza a comparação aproximada == |
break |
Sai do switch — esquecer isso faz com que o controle de fluxo passe para o próximo caso |
default |
É executado quando nenhum caso corresponde (opcional) |
| Omissão intencional | Omitir break deliberadamente quando vários casos compartilham um mesmo bloco de código |
break causa o “fall-through” — o código do caso seguinte também é executado! O switch do PHP não possui um break automático.
5. A expressão match (PHP 8.0)
O PHP 8 introduziu o match, uma alternativa moderna, mais segura e mais concisa ao switch:
▶ Exemplo: match x switch
<?php
$day = "Wednesday";
$message = match($day) {
"Monday" => "A new week begins!",
"Friday" => "Weekend is almost here!",
"Saturday", "Sunday" => "Enjoy your weekend!",
default => "Keep pushing through the workweek!",
};
echo $message; // Keep pushing through the workweek!
?>
Três vantagens principais do match em relação ao switch:
| switch | match | |
|---|---|---|
| Comparação | == (flexível) |
=== (rigoroso) |
| Valor de retorno | Nenhum (é preciso usar break e atribuir manualmente) |
✅ Retorna o resultado diretamente |
| Passagem direta | ⚠️ Passagem direta (precisa de uma pausa) | ✅ Sem passagem direta |
| Padrão | default (opcional) |
default (obrigatório; caso contrário, ocorrerá um erro) |
| Várias condições | Truque de “fall-through” | 'A', 'B' => ... separadas por vírgulas |
▶ Exemplo: comparação estrita
<?php
$code = 200;
$httpCode = "200"; // Note: this is a string
// match uses === strict comparison
$result = match($code) {
200 => "Success", // $code === 200 is true
default => "Other",
};
echo $result; // Success
// switch uses == loose comparison — both would match
?>
match. Recorra a switch apenas quando for necessário utilizar lógica complexa dentro de cada caso (por exemplo, várias instruções).
6. Combinação de expressões condicionais com HTML
Esse é o padrão mais comum do PHP para páginas da web — use a sintaxe alternativa para tornar as condições mais legíveis dentro do HTML:
<?php
$isLogin = true;
?>
<!-- Alternative syntax: colon + endif -->
<?php if ($isLogin): ?>
<div class="user-info">
<img src="avatar.jpg">
<span>Welcome back, John!</span>
<a href="/logout.php">Log out</a>
</div>
<?php else: ?>
<div class="login-btn">
<a href="/login.php">Log in</a>
</div>
<?php endif; ?>
| Sintaxe padrão | Sintaxe alternativa (recomendada em HTML) |
|---|---|
if () { } |
if (): ... endif; |
if () { } else { } |
if (): ... else: ... endif; |
if () { } elseif () { } else { } |
if (): ... elseif (): ... else: ... endif; |
foreach () { } |
foreach (): ... endforeach; |
while () { } |
while (): ... endwhile; |
for () { } |
for (): ... endfor; |
▶ Exemplo: Condicionais + HTML combinados
<?php
$vip = true;
$balance = 800;
?>
<!DOCTYPE html>
<html>
<body>
<?php if ($vip): ?>
<div class="vip-badge">VIP Member</div>
<?php endif; ?>
<?php if ($balance > 500): ?>
<button>Withdraw Now</button>
<?php elseif ($balance > 0): ?>
<p>Balance is under $500. Withdrawal unavailable.</p>
<?php else: ?>
<p>Balance is zero. Top up to continue!</p>
<?php endif; ?>
</body>
</html>
if (): ... endif;) é muito mais legível do que as chaves ({}). Com as chaves, é preciso contar os pares para saber onde termina um if; com endif;, isso fica imediatamente claro.
❓ Perguntas Frequentes
P: Como escolho entre
switchematch? R: No PHP 8.0 e versões posteriores, dê preferência aomatch— ele é mais seguro (comparação estrita===), mais conciso (valor de retorno direto) e não apresenta fall-through. Use oswitchapenas quando precisar de uma lógica complexa com várias instruções dentro de cada caso.
P: E se meu if tiver muitos níveis de aninhamento? R: Se você ultrapassar 3 níveis de aninhamento, é hora de refatorar. Tente: (1) retornos antecipados (cláusulas guard); (2) combinar condições em uma única variável; ou (3) usar
matchem vez de cadeias profundas deif/elseif.
P: Existe alguma diferença entre
else ifeelseif? R: Não há diferença funcional.elseifé a palavra-chave nativa do PHP (recomendada).else ifé uma forma aninhada. Ambas funcionam da mesma maneira.
📖 Resumo
if→elseif→elselida com lógica condicional de múltiplas ramificaçõesswitchfunciona bem para várias correspondências exatas — lembre-se de usarbreakpara evitar a passagem para a próxima condiçãomatch(PHP 8+) é mais seguro do que o switch (===comparação estrita, sem passagem automática, retorna diretamente)- Nos modelos HTML, use a sintaxe alternativa (
if (): ... endif;) — ela é muito mais legível do que as chaves - Quando as condições se tornarem muito numerosas, considere usar
matchoureturnmais cedo para reduzir o aninhamento
📝 Exercícios
- Escreva um programa de avaliação de notas: 90+ = A, 80–89 = B, 70–79 = C, 60–69 = D, abaixo de 60 = F. Implemente-o uma vez com
if/elseife outra commatche, em seguida, compare as duas abordagens. - Crie uma página da web simulada que utilize a sintaxe alternativa para exibir conteúdos diferentes de acordo com o status do usuário: se o usuário não estiver conectado, exiba um botão de login; se estiver conectado, exiba o nome de usuário e um link para sair; se estiver conectado E for VIP, exiba adicionalmente um emblema VIP.
- Escreva um verificador de anos bissextos: um ano é bissexto se for divisível por 4, mas não por 100, ou se for divisível por 400.



