Você já quis comparar o valor de uma variável ou expressão com vários resultados possíveis e executar condicionalmente algum código? Existem muitas opções disponíveis para você fazer isso. Você pode usar várias condições if-else ou usar instruções switch-case.
Neste tutorial, mostrarei como usar switch-case em PHP para comparar uma variável com muitos valores diferentes.
Usando switch-case
vs if-else
: Comparação direta
Vamos começar com um exemplo simples que mostra uma comparação direta entre o uso if-else
e switch-case
para controlar o fluxo do programa.
Tente executar o código acima várias vezes para obter uma saída diferente. Você notará algumas coisas.
Cada case
afirmação é semelhante a um if
ou elseif
quadra. A saída que você obtém do if-else
seção é igual à saída do switch-case
seção. Lembre-se sempre de usar um break
instrução para parar a execução do código para cada case
declaração.
Digamos que você esqueceu de incluir break
com cada case
bloco e o valor de $animal
é ‘Leão’. Nesse caso, o código exibirá a localização de leões, veados e cabras, bem como a declaração padrão sobre o guia turístico.
o default
instrução é como um catch-all que lida com todos os outros valores de $animal
. É semelhante ao else
bloco que usamos no if-else
seção. Lembre-se de que você não pode usar vários default
declarações em seu código.
Verificando várias condições de uma só vez
O que você faz se houver vários animais na mesma seção do zoológico? Com if-else
blocos, você pode colocá-los todos dentro de uma instrução condicional usando ||
para ver se algum deles avalia true
. Aqui está um exemplo:
$animal="Zebra"; // Outputs: Zebras are in the west section of the zoo. if($animal == 'Elephant' || $animal == 'Lion' || $animal == 'Goat') { echo $animal.'s are in the south section of the zoo.'; } elseif($animal == 'Zebra') { echo 'Zebras are in the west section of the zoo.'; } elseif($animal == 'Deer') { echo 'Deer are in the east section of the zoo.'; } else { echo 'Ask a tour guide.'; }
O código acima nos diria corretamente que as Zebras estão no oeste seção do zoológico. Ele pulou o código dentro do primeiro bloco if porque isso só é executado quando o $animal
é um elefante, leão ou cabra.
Vamos reescrever o código acima na forma de switch-case
declarações. Você pode ficar tentado a escrevê-lo como mostrado abaixo:
// Outputs: Zebras are in the east section of the zoo. switch($animal) { case 'Elephant' || 'Lion' || 'Goat': echo $animal.'s are in the east section of the zoo.'; break; case 'Zebra': echo 'Zebras are in the west section of the zoo.'; break; case 'Deer': echo 'Deer are in the north section of the zoo.'; break; default: echo 'Ask a tour guide.'; }
Olhe atentamente e você verá que a declaração agora diz que as Zebras estão no leste seção do zoológico. Então, o que aconteceu aqui?
O valor ou expressão que passamos para switch
é vagamente comparado ao valor ou expressão que passamos com cada case
declaração. Agora, 'Elephant' || 'Lion || 'Goat'
em última análise, avalia true
. Isso também retorna true
quando vagamente comparado com o valor dentro $animal
porque uma string não vazia é um valor verdadeiro. O código para a primeira instrução case é então executado e obtemos o local errado para o mesmo zoológico.
A maneira correta de lidar com vários case
instruções que devem executar a mesma seção de código é escrevendo os valores case em linhas separadas, conforme mostrado abaixo:
// Outputs: Zebras are in the west section of the zoo. switch($animal) { case 'Elephant': case 'Lion': case 'Goat': echo $animal.'s are in the east section of the zoo.'; break; case 'Zebra': echo 'Zebras are in the west section of the zoo.'; break; case 'Deer': echo 'Deer are in the north section of the zoo.'; break; default: echo 'Ask a tour guide.'; }
Conseguimos a localização correta das Zebras agora e nenhum visitante se perderá ao procurá-las.
Repetir Avaliação e Desempenho
Mais uma coisa que você deve ter em mente é que a condição é avaliada apenas uma vez ao usar switch
declaração. Por outro lado, é avaliado várias vezes ao usar if-else
declaração, ou seja. uma vez para cada if
quadra. Aqui está um exemplo:
function most_populated($country) { return 'New York'; } // Outputs: This is not surprising at all. switch(most_populated('United States')) { case 'New York': echo 'This is not surprising at all.'; break; case 'Oakland': echo 'This does not seem correct.'; break; }
Fazemos uma chamada para a função most_populated()
que retorna o nome de uma cidade. Ele simplesmente retorna Nova York neste caso, mas pode ser muito mais complicado e obter dados da cidade de um serviço da Web para o país passado. Escrever várias condições if-else neste caso resultaria em várias chamadas para o most_populated()
função.
Obviamente, poderíamos evitar todas essas chamadas armazenando o resultado da chamada em uma variável, mas o uso de switch permite que você não use nenhuma variável.
Pensamentos finais
Neste tutorial, mostrei como usar switch-case
instruções em PHP no lugar de if-else
blocos para executar código condicionalmente. Também vimos como escrever case
declarações que cobrem várias condições. Por fim, aprendemos como usar switch-case
pode ser mais rápido do que if-else
bloqueios em determinadas situações.