Instruções switch e match
Use switch e match do PHP 8 para lógica com vários caminhos.
Instruções switch e match é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
Switch vs Cadeias de if
Quando você tem muitas ramificações baseadas no valor de uma única variável, switch é mais limpo do que uma cadeia longa de if/elseif.
O PHP 8 introduziu match como uma alternativa moderna e estrita.
Noções Básicas da Instrução switch
Switch avalia sua expressão uma vez e executa o bloco do case correspondente:
<?php
$day = 'Monday';
switch ($day) {
case 'Monday':
echo 'Start of work week';
break;
case 'Friday':
echo 'Almost weekend';
break;
default:
echo 'Midweek';
}Comportamento de Passagem ao Próximo Case
Sem break, a execução continua no case seguinte — um recurso útil para agrupar casos intencionalmente:
<?php
$status = 2;
switch ($status) {
case 1:
case 2:
case 3:
echo 'In progress'; // runs for 1, 2, or 3
break;
case 4:
echo 'Done';
break;
}Switch Usa Comparação Flexível
Switch usa == (comparação flexível) internamente — isso pode causar correspondências surpreendentes:
<?php
$val = 0;
switch ($val) {
case 'foo': // 0 == 'foo' in PHP 7!
echo 'match foo';
break;
case 0:
echo 'match zero'; // PHP 8 fixes this
break;
}
// PHP 8: match zero (fixed)
// PHP 7: match foo (bug!)Expressão match do PHP 8
match é semelhante a switch, mas usa comparação estrita, retorna um valor e não exige break:
<?php
$status = 'active';
$label = match($status) {
'active' => 'Currently active',
'inactive' => 'Not active',
'pending' => 'Awaiting activation',
default => 'Unknown status',
};
echo $label; // Currently activematch sem Correspondência e com Exceção
Se nenhum ramo corresponder em match e não houver um default, será lançada a exceção UnhandledMatchError:
<?php
$code = 99;
try {
$result = match($code) {
200 => 'OK',
404 => 'Not Found',
500 => 'Server Error',
// no default!
};
} catch (\UnhandledMatchError $e) {
echo 'Unhandled match value: ' . $code;
}match com Várias Condições
Um único ramo de match pode listar vários valores separados por vírgulas:
<?php
$lang = 'tr';
$region = match($lang) {
'en', 'en-US', 'en-GB' => 'English',
'tr', 'az' => 'Turkic',
'fr', 'be', 'ca' => 'French-speaking',
default => 'Other',
};
echo $region; // Turkicmatch com Expressões Complexas
Os ramos de match podem usar expressões arbitrárias no lado direito:
<?php
$score = 85;
$grade = match(true) {
$score >= 90 => 'A',
$score >= 80 => 'B', // matches
$score >= 70 => 'C',
default => 'F',
};
echo $grade; // BRetorno a partir de match
Como match é uma expressão, ele pode ser usado em qualquer lugar onde um valor seja esperado:
<?php
function getHttpMessage(int $code): string {
return match($code) {
200 => 'OK',
201 => 'Created',
400 => 'Bad Request',
401 => 'Unauthorized',
404 => 'Not Found',
default => 'Unknown',
};
}
echo getHttpMessage(404); // Not Foundswitch em um Contexto de Retorno
Switch pode ser usado dentro de uma função para retornar valores diferentes, mas match é mais limpo:
<?php
function describe(int $n): string {
switch (true) {
case $n < 0: return 'negative';
case $n === 0: return 'zero';
default: return 'positive';
}
}
echo describe(-5); // negative
echo describe(0); // zero
echo describe(7); // positiveQuando Usar switch ou match
Orientações para escolher:
- Use
matchquando precisar de comparação estrita e de um valor de retorno (PHP 8+) - Use
switchpara agrupamentos com passagem ao próximo case ou ao oferecer suporte ao PHP 7 - Ambos são mais limpos do que cadeias longas de if/elseif para ramificações com vários valores
Verificação Rápida
O que acontece em uma expressão match quando nenhum ramo corresponde e não há um valor padrão?
Recapitulação: switch e match
Principais diferenças:
switch— comparação flexível, passagem ao próximo case, PHP 4+match— comparação estrita, sem passagem ao próximo case, retorna um valor, PHP 8+- Match lança
UnhandledMatchErrorquando não há valor padrão - Os ramos de match aceitam vários valores separados por vírgulas
A seguir: laços for e while.
Perguntas Frequentes
A aula “Instruções switch e match” é grátis?
Sim — o texto completo de “Instruções switch e match” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “Instruções switch e match”?
Use switch e match do PHP 8 para lógica com vários caminhos. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar PHP Academy?
Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Instruções switch e match”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de PHP Academy?
Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- if, elseif e else
- Instruções switch e match
- Laços for e while
- foreach e controle de laços