Manual do PHP
Anterior | Capítulo 11. Estruturas de Controle | Próxima

# `switch`

A instrução `switch` é similar a uma série de instruções IFs seguidas. Em muitas ocasiões, você poderá ter que comparar a mesma variável (ou expressão) com muitos valores diferentes, executando códigos diferentes dependendo com qual valor ele se encaixar. É exatamente para isso que a instrução `switch` faz.

> Nota: Note que diferentemente de outras linguagens, a instrução continue se aplica a switch e age similarmente a um `break`. Se você tem um switch dentro de um loop e deseja continuar para a próxima iteração do loop, use `continue 2`.

Os exemplos seguintes mostram duas maneiras diferentes de escrever a mesma coisa, uma utilizando uma série de `is`s e `elseif`s e a outra utlizando a instrução `switch`:

`<?php if ($i == 0) { echo "i igual a 0"; } elseif ($i == 1) { echo "i igual a 1"; } elseif ($i == 2) { echo "i igual a 2"; } switch ($i) { case 0: echo "i igual a 0"; break; case 1: echo "i igual a 1"; break; case 2: echo "i igual a 2"; break; } ?>`

É importante entender como a instrução `switch` funciona para evitar enganos. A instrução `switch` executa linha a linha (atualmente, instrução a instrução). No início, nenhum código é executado. Somente quando uma instrução `case` é encontrada com um valor que combina com a expressão do `switch` faz com que o PHP execute as instruções a partir daí. O PHP continua executando as instruções até o fim do bloco `switch` ou na primeira vez que encontrar uma instrução `break`. Se você não escrever uma instrução `break` no fim das instruções `case`, o PHP continuará executando os `case`s seguintes. Exemplo:

`<?php switch ($i) { case 0: echo "i igual a 0"; case 1: echo "i igual a 1"; case 2: echo "i igual a 2"; } ?>`

Aqui, se $i é igual a zero, o PHP executará todas as instruções echo! Se $i é igual a 1, o PHP executará os últimas duas instruções echo, e somente se $i for igual a 2, você terá o comportamento 'esperado' apenas onde 'i igual a 2' será mostrado. Então é importante não se esquecer das instruções `break` (e as vezes não colocá-las para obter esse resultado em certas circunstâncias).

Em uma instrução `switch`, a condição somente será avaliada e resultado comparado para cada instrução `case`. Em uma instrução `elseif`, a condição é avaliada novamente. Se sua condição é mais complicada que um simples comparação e/ou e dentro de um loop, um `switch` é mais rápido.

Um case pode não ter nenhuma instrução dentro, o que simplesmente passa o controle para o próximo case.

`<?php switch ($i) { case 0: case 1: case 2: echo "i é menor que 3 mas não negativo"; break; case 3: echo "i é 3"; } ?>`

Um case especial é o `default`. Esse case é executado quando nenhum outro case combina. Ele precisa ser a última instrução `case`. Por exemplo:

`<?php switch ($i) { case 0: echo "i igual a 0"; break; case 1: echo "i igual a 1"; break; case 2: echo "i igual a 2"; break; default: echo "i não é igual a 0, 1 ou 2"; } ?>`

A expressão avaliada pelo `case` precisa ser um tipo simples, ou seja, inteiros, números de ponto flutuante e strings. Arrays ou objetos não podem ser utilizados a não ser que eles impliquem num tipo simples.

A sintaxe alternativa para estruturas de controle é suportada para os switches. Para maiores informações, veja Sintaxe alternativa para estruturas de controle.

`<?php switch ($i): case 0: echo "i igual a 0"; break; case 1: echo "i igual a 1"; break; case 2: echo "i igual a 2"; break; default: echo "i não é igual a 0, 1 ou 2"; endswitch; ?>`

Anterior | Principal | Próxima
`continue` | Acima | `declare`