Perché la dichiarazione corrispondente non eseguito anche se l'eco vuota ($ posizione) viene stampato 1
-
19-09-2019 - |
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?
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){
// ...
}
// ...