Pourquoi la déclaration correspondante non exécutée même si l'écho vide (emplacement $) imprime 1
-
19-09-2019 - |
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?
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){
// ...
}
// ...