Por que a declaração correspondente não é executada, mesmo que o eco vazio ($ localização) imprime 1
-
19-09-2019 - |
Pergunta
echo empty($location);
switch($location){
case (empty($location)):
expression 1;
break;
case ($location%10000==0):
expression 2;
break;
case ($location%100==0):
expression 3;
break;
default:
expression 4;
break;
}
Quando eu ecoando vazio ($ local), ele imprime 1, por que a expressão 1 não é executada?
Solução
Você não está usando as instruções de switch corretamente. A maneira como eles trabalham é comparar cada valor de caso com o inicial switch
valor.
No seu caso, vamos fingir $location = null
;
echo empty($location); // true: null is considered empty.
switch ($location) {
case empty($location) : // this performs the check:
// $location == empty($location)
// null == true ==> false
Então é por isso que não funciona ..
Eu recomendo manter if .. else
nesse caso.
Outras dicas
o empty
função retorna um valor booleano de 1 ou 0 http://uk3.php.net/empty
Considerando que a switch / case
Declarações Verifique se uma variável mantém um determinado valor e executa uma expressão dependendo disso
No seu caso, expression 1
deve ser executado se o valor de $location==1
(você efetivamente pediu isso quando você digitou switch($location)
),
Portanto, a lógica do seu código acima é:
Se $ localização == 1, Execute a expressão 1
Se $ Location%10000 == 0, Execute a expressão 2
etc etc.
é o valor de $location==1
?
UMA switch
A declaração não é a mesma if/else
declaração. As declarações de switch estão procurando valores específicos. Se encontrar o valor especificado em um dado case
declaração, ele executa o código depois disso case
declaração.
O seguinte código:
switch($x)
case 1:
// some stuff
break;
case 2:
// some other stuff
break;
default:
// some more stuff
break;
É o equivalente a este código:
if($x == 1){
// some stuff
}
elseif($x == 2){
// some other stuff
}
else{
// some more stuff
}
Basicamente, switch
declarações são atalhos para if/elseif/else
Blocos onde você está verificando a igualdade de uma única variável contra várias possibilidades.
Desde empty()
retorna 0 ou 1, seu primeiro case
vai funcionar se $location
é 1 (se $location
está vazio) ou 0 (se $location
não está vazio). É quase como se você tivesse escrito o seguinte:
elseif($location == empty($location)){ ...
Faz sentido? Em vez de usar um switch
Declaração, você provavelmente deseja o seguinte:
if(empty($location)){
// ...
}
elseif($location % 10000 == 0){
// ...
}
// ...