W3docs

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 chavesswitch (...) { ... }
  • 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

  • switch e PHP switch — o comando que endswitch fecha
  • break — encerra um case para que a execução não continue automaticamente
  • endif, endfor, endforeach — os fechadores da sintaxe alternativa para outras estruturas de controle

Prática

Prática
O que o comando 'endswitch' significa em PHP?
O que o comando 'endswitch' significa em PHP?
Was this page helpful?