Perché la dichiarazione corrispondente non eseguito anche se l'eco vuota ($ posizione) viene stampato 1

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

Domanda

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 faccio eco vuota ($ location), esso stampa 1, perché è espressione 1 non eseguita?

È stato utile?

Soluzione

Non stai usando correttamente istruzioni switch. Il loro modo di lavorare è quello di confrontare ogni valore caso contro il valore switch iniziale.

Nel tuo caso, facciamo finta $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

così è per questo che non funziona ..

Mi consiglia di attenersi a if .. else in questo caso.

Altri suggerimenti

La funzione empty restituisce un valore booleano 1 o 0 http://uk3.php.net/empty

considerando le dichiarazioni switch / case controllare se una variabile contiene un certo valore e eseguire un'espressione seconda che

Nel caso si, expression 1 deve essere eseguito se il valore di $location==1 (in modo efficace chiesto che quando si digitato switch($location)),

Quindi, la logica del codice di cui sopra è:

  

Se $ location == 1, eseguire l'espressione 1
  se $ location% 10000 == 0, eseguire espressione 2
  ecc ecc.

è il valore della $location==1?

Una dichiarazione switch non è la stessa di una dichiarazione if/else. istruzioni switch sono alla ricerca di valori specifici. Se trova il valore specificato in una data dichiarazione case, viene eseguito il codice dopo quella dichiarazione case.

Il seguente codice:

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

è l'equivalente di questo codice:

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

In sostanza, le dichiarazioni switch sono scorciatoie per i blocchi if/elseif/else dove si sta controllando per l'uguaglianza di una singola variabile contro un mucchio di possibilità.

Dal empty() restituisce 0 o 1, il primo case sarà eseguito se $location è 1 (se $location è vuoto) o 0 (se $location non è vuota). E 'quasi come hai scritto il seguente:

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

ha senso? Invece di usare una dichiarazione switch, probabilmente si desidera il seguente:

if(empty($location)){
    // ...
}
elseif($location % 10000 == 0){
    // ...
}
// ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top