¿Por qué es la declaración correspondiente no ejecutará aunque el eco vacío ($ ubicación) imprime 1

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

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?

¿Fue útil?

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){
    // ...
}
// ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top