No PHP existe uma maneira muito interessante de programar estruturas condicionais. Estou falando do switch.
A utilização do switch para blocos condicionais de várias condições ao invés de elseif's repetitivos deixa seu código muito mais limpo, bonito e de qualidade.
A questão é:
Como trabalhar com expressões no switch?
Antes de mais nada, vamos relembrar um pouco a sintaxe do switch:
switch(4){ case 1: $result = 'O valor é 1'; break; case 2: $result = 'O valor é 2'; break; case 3: $result = 'O valor é 3'; break; case 4: $result = 'O valor é 4'; break; default: $result = 'Não foi encontrado'; } echo $result;
Para o código acima, como sabemos, o resultado será "O valor é 4".
Podemos também trabalhar com cálculos (expressões) dentro dos cases. Vejamos um exemplo:
switch(4){ case (1+1): $result = 'O valor casa com 1+1'; break; case (2+1): $result = 'O valor casa com 2+1'; break; case (3+1): $result = 'O valor casa com 3+1'; break; case (4+1): $result = 'O valor casa com 4+1'; break; default: $result = 'Não casou'; } echo $result;
Neste caso, o resultado será "O valor casa com 3+1", tendo em vista que 3 + 1 é igual a 4 (exatamente o valor que estamos passando para o witch).
Vamos agora lembrar um pouco dos retornos de expressão em booleanos (true/false).
Quando utilizamos o seguinte código:
var_dump(5>=4);
Nos será retornado bool(true), ou seja, verdadeiro, porque 5 é maior que 4.
Logicamente se efetuarmos o contrário:
var_dump(5<=4);
Nos será retornado bool(false), ou seja, falso, porque 5 não é maior que 4.
Tendo essa lógica em vista podemos então concluir que para toda condição será retornado verdadeiro ou falso, assim como acontece em expressões na cláusula if e elseif.
Com esse conhecimento e sabendo também que é possível trabalhar com expressões nos cases do switch, basta então passarmos para o switch um valor booleano de comparação e efetuar normalmente nos cases nossas verificações.
Vejamos um exemplo então:
switch(true){ case (1>=4): $result = '1 é maior ou igual a 4'; break; case (2>=4): $result = '2 é maior ou igual a 4'; break; case (3>=4): $result = '3 é maior ou igual a 4'; break; case (4>=4): $result = '4 é maior ou igual a 4'; break; default: $result = 'Não casou'; } echo $result;
Sendo assim, o resultado será "4 é maior ou igual a 4" porque a expressão 4>=4 retorna true, que é o valor que passamos no swicth.
Para concluir, vejamos um exemplo inverso:
switch(false){ case (1<=4): $result = '1 é menor ou igual a 4'; break; case (2<=4): $result = '2 é menor ou igual a 4'; break; case (3<=4): $result = '3 é menor ou igual a 4'; break; case (4<=4): $result = '4 é menor ou igual a 4'; break; case (5<=4): $result = '5 é menor ou igual a 4'; break; default: $result = 'Não casou'; } echo $result;
Como já era de se esperar, o resultado será "5 é menor ou igual a 4", porque a expressão 5<=4 retorna false, que é o valor que passamos no swicth.
Lembrando que é possível utilizar qualquer tipo de operador lógico ou de comparação nas expressões dos cases, da mesma forma que fazemos com if's e elseif's.