Por que a declaração correspondente não é executada, mesmo que o eco vazio ($ localização) imprime 1

StackOverflow https://stackoverflow.com/questions/1895545

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?

Foi útil?

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){
    // ...
}
// ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top