¿Por qué es la declaración correspondiente no ejecutará aunque el eco vacío ($ ubicación) imprime 1
-
19-09-2019 - |
Pregunta
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;
}
Cuando me hago eco de vacío ($ ubicación), imprime 1, ¿por qué es la expresión 1 no se ejecuta?
Solución
No se está utilizando sentencias switch correctamente. La forma de trabajo es comparar cada valor caso contra el valor inicial switch
.
En su caso, vamos a suponer $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
así que por eso no se ejecuta ..
Me gustaría recomendar que se pega a if .. else
en este caso.
Otros consejos
La función empty
devuelve un valor booleano de 1 o 0 http://uk3.php.net/empty
Mientras que las declaraciones switch / case
comprobar si una variable tiene un valor determinado y ejecutar una expresión en función de que
En caso de que, expression 1
deberá ejecutarse si el valor de $location==1
(que solicitaba de hecho, que al escribir switch($location)
),
Así que la lógica de su código anterior es:
Si $ ubicación == 1, ejecute la expresión 1 | Si la ubicación $ 10000% == 0, ejecutar expresión 2
etc., etc.
es el valor de $location==1
?
Una declaración switch
no es lo mismo que una declaración if/else
. sentencias switch están buscando valores específicos. Si encuentra el valor especificado en un comunicado case
dada, se ejecuta el código después de que la declaración case
.
El siguiente código:
switch($x)
case 1:
// some stuff
break;
case 2:
// some other stuff
break;
default:
// some more stuff
break;
es el equivalente de este código:
if($x == 1){
// some stuff
}
elseif($x == 2){
// some other stuff
}
else{
// some more stuff
}
Básicamente, las declaraciones switch
son accesos directos para los bloques if/elseif/else
donde se está comprobando por la igualdad de una sola variable contra un montón de posibilidades.
Desde empty()
devuelve 0 o 1, su primera case
se ejecutará si es $location
1 (si $location
está vacía) o 0 (si $location
no está vacío). Es casi como si usted ha escrito lo siguiente:
elseif($location == empty($location)){ ...
tiene sentido? En lugar de utilizar una declaración switch
, es probable que desee lo siguiente:
if(empty($location)){
// ...
}
elseif($location % 10000 == 0){
// ...
}
// ...