switch
(PHP 4, PHP 5, PHP 7, PHP 8)
A declaração switch
é similar a uma série de
declarações IF na mesma expressão. Em muitos casos, se deseja
comparar as mesmas variáveis (ou expressões), com
diferentes valores, e executar pedaços diferentes de código dependendo
de qual valor ela é igual. Esta é exatamente a serventia da
declaração switch
.
Nota:
Note que ao contrário de outras linguagens, a declaração
continue
aplica-se ao switch
e age similarmente ao break
. Se
possuir um switch
dentro de um laço, e deseja continuar na próxima iteração
do laço externo, utilize continue 2
.
Nota:
Note que o switch/case faz
comparação frouxa.
Changelog
Versão |
Descrição |
7.0.0 |
Múltiplos cases default lançarão um erro E_COMPILE_ERROR .
|
Os dois exemplos a seguir demonstram duas formas diferentes de escrever
a mesma coisa, uma usando uma série de declarações if
e
elseif
, e a outra usando a declaração
switch
:
Exemplo #1 Estrutura do switch
<?php
if ($i == 0) {
echo "i equals 0";
} elseif ($i == 1) {
echo "i equals 1";
} elseif ($i == 2) {
echo "i equals 2";
}
switch ($i) {
case 0:
echo "i equals 0";
break;
case 1:
echo "i equals 1";
break;
case 2:
echo "i equals 2";
break;
}
?>
Exemplo #2 A estrutura do switch
permite o uso de strings
<?php
switch ($i) {
case "apple":
echo "i is apple";
break;
case "bar":
echo "i is bar";
break;
case "cake":
echo "i is cake";
break;
}
?>
É importante entender como a declaração switch
é executada a fim de evitar enganos. A declação
switch
executa linha por linha
(na verdade, declaração por declaração). No início nenhum código é
executado. Somente quando uma declaração case
é encontrada,
cuja expressão avalia um valor que corresponde ao valor do
switch
, o PHP começará a executar a
declaração. O PHP continuará a executar a declaração até o fim do bloco
switch
, ou até a primeira declaração
break
encontrada. Se não for escrita uma declaração
break
ao final da lista de declarações do case,
o PHP continuará executando as declarações dos próximos
cases. Por exemplo:
Neste exemplo, se a variável $i for igual a 0, o PHP executará todos as
declarações echo! Se a variável $i for igual a 1, o PHP executará as duas
últimas declarações echo. Somente se obterá o comportamento esperado ('i equals 2'
será exibido), se $i for igual a 2. Sendo assim,
é importante não esquecer as declarações break
(mesmo quando se quer evitar, de propósito, sua omissão em
certas circunstâncias).
Em uma declaração switch
, a condição é
avaliada somente uma vez, e o resultado é comparado a cada
declaração case
. Em uma declaração elseif
.
a condição é avaliada outra vez. Se a condição for
mais complicada que uma simples comparação e/ou está em um laço pequeno,
a declaração switch
pode ser mais rápida.
A lista de declarações de um case também podem estar vazia,
passando o controle da lista de declarações para o próximo case.
Um case especial é o default
. Este case corresponde
a tudo que não foi correspondido pelos outros cases. Por exemplo:
A sintaxe alternativa das estruturas de controle é suportada por
switches. Para mais informações, veja Sintaxe alternativa
para estruturas de controle.
É possível utilizar o ponto e vírgula ao invés dos dois pontos em um case, como: