Pourquoi la déclaration correspondante non exécutée même si l'écho vide (emplacement $) imprime 1

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

Question

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;

}

Quand je fais l'écho vide (emplacement $), il imprime 1, pourquoi est l'expression 1 non exécutée?

Était-ce utile?

La solution

Vous n'utilisez pas correctement les instructions switch. La façon dont ils travaillent est de comparer chaque valeur de cas sur la valeur de switch initiale.

Dans votre cas, feignons $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

c'est pourquoi il ne fonctionne pas ..

Je vous recommande de coller à if .. else dans ce cas.

Autres conseils

La fonction empty renvoie une valeur booléenne de 1 ou 0 http://uk3.php.net/empty

Alors que les déclarations de switch / case vérifier si une variable est titulaire d'une certaine valeur et exécuter une expression en fonction de ce que

En vous cas, expression 1 doit être exécutée si la valeur de $location==1 (vous avez demandé efficacement que lorsque vous avez saisi switch($location)),

Alors la logique de votre code ci-dessus est:

  

si l'emplacement de $ == 1, exécutez l'expression 1
  si l'emplacement de $% de 10000 == 0, exécutez l'expression 2
  etc etc.

est la valeur de $location==1?

Une déclaration de switch est pas la même chose comme une déclaration de if/else. Instructions de commutation sont à la recherche des valeurs spécifiques. Si elle trouve la valeur spécifiée dans un communiqué de case donné, il exécute le code après cette déclaration de case.

Le code suivant:

switch($x)
    case 1:
        // some stuff
        break;
    case 2:
        // some other stuff
        break;
    default:
        // some more stuff
        break;

est l'équivalent de ce code:

if($x == 1){
    // some stuff
}
elseif($x == 2){
    // some other stuff
}
else{
    // some more stuff
}

En fait, les déclarations switch sont des raccourcis pour les blocs de if/elseif/else où vous vérifiez pour l'égalité d'une seule variable contre un tas de possibilités.

Depuis retourne empty() 0 ou 1, votre première case fonctionnera si $location est 1 (si $location est vide) ou 0 (si $location est pas vide). Il est presque comme vous avez écrit ce qui suit:

elseif($location == empty($location)){ ...

sens? Au lieu d'utiliser une déclaration de switch, vous voulez probablement les éléments suivants:

if(empty($location)){
    // ...
}
elseif($location % 10000 == 0){
    // ...
}
// ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top