endswitch
O endswitch encerra um bloco switch na sintaxe alternativa do PHP, substituindo a chave de fechamento } pela palavra-chave endswitch;
Introdução
endswitch fecha um comando switch escrito na sintaxe alternativa do PHP — a forma que substitui a chave de abertura { por dois-pontos : e a chave de fechamento } pela palavra-chave endswitch;. Não é um recurso de linguagem separado, mas sim o delimitador de fechamento de uma forma específica de escrever o switch.
O PHP oferece duas maneiras equivalentes de escrever estruturas de bloco como switch, if, for, foreach e while:
- Sintaxe com chaves —
switch (...) { ... } - Sintaxe alternativa (com dois-pontos) —
switch (...): ... endswitch;
Esta página explica quando o endswitch é obrigatório, por que a sintaxe alternativa existe e o erro mais comum que confunde as pessoas.
Sintaxe: chaves vs. endswitch
Os dois trechos abaixo fazem exatamente a mesma coisa. A única diferença é como o bloco é aberto e fechado.
<?php
// Curly-brace syntax — no endswitch
switch ($n) {
case 1:
echo "one";
break;
default:
echo "other";
}<?php
// Alternative syntax — colon opens, endswitch closes
switch ($n):
case 1:
echo "one";
break;
default:
echo "other";
endswitch;O endswitch é obrigatório com a forma de dois-pontos e inválido com a forma de chaves — você escolhe um estilo por switch e mantém a consistência. Misturá-los (um abridor : com um fechador }, ou vice-versa) gera um erro de análise.
Exemplo
Aqui está um exemplo completo e executável usando a sintaxe alternativa:
<?php
$dayOfWeek = 2;
switch ($dayOfWeek):
case 1:
echo "Today is Monday";
break;
case 2:
echo "Today is Tuesday";
break;
case 3:
echo "Today is Wednesday";
break;
case 4:
echo "Today is Thursday";
break;
case 5:
echo "Today is Friday";
break;
default:
echo "It is the weekend!";
endswitch;Como $dayOfWeek é 2, o ramo case 2: é executado e imprime Today is Tuesday. O break ao final de cada ramo encerra o switch para que os casos seguintes não sejam executados, e default: trata qualquer valor que não corresponda a nenhum case. A linha endswitch; fecha a estrutura; a execução continua com o que vier depois.
Por que usar a sintaxe alternativa?
A forma com dois-pontos existe principalmente para templates que intercalam PHP e HTML. Quando o corpo de uma estrutura de controle ocupa muitas linhas de marcação, uma } perdida é fácil de colocar no lugar errado e difícil de rastrear visualmente. A palavra-chave nomeada endswitch torna o ponto de fechamento óbvio — você pode ver de relance que ela faz par com switch, da mesma forma que </div> faz par com <div>.
Este padrão é comum em templates PHP puro (e em frameworks que compilam para eles):
<?php switch ($status): ?>
<?php case 'active': ?>
<p>Your account is active.</p>
<?php break; ?>
<?php case 'pending': ?>
<p>Your account is awaiting approval.</p>
<?php break; ?>
<?php default: ?>
<p>Account status unknown.</p>
<?php endswitch; ?>Aqui os casos geram HTML diretamente em vez de usar echo. A sintaxe alternativa mantém cada tag <?php ?> curta e o endswitch de fechamento autodocumentado. Com chaves, o fechador seria um <?php } ?> isolado — muito menos legível dentro de um bloco de marcação.
Erro comum: nenhuma saída antes do primeiro case
Na sintaxe alternativa do switch você não deve emitir nenhum HTML ou espaço em branco entre a linha switch(...): e o primeiro case. Em um template, o texto colocado ali é enviado ao navegador incondicionalmente e o PHP emite um aviso, portanto mantenha a tag de abertura logo antes do primeiro <?php case ...: ?>.
Referências relacionadas
switche PHPswitch— o comando queendswitchfechabreak— encerra umcasepara que a execução não continue automaticamenteendif,endfor,endforeach— os fechadores da sintaxe alternativa para outras estruturas de controle