Почему соответствующий оператор не выполняется, даже если Echo пустое ($ location) распечатывает 1
-
19-09-2019 - |
Вопрос
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;
}
Когда я эхо пуст (местоположение $), он распечатывает 1, почему выражение 1 не выполнено?
Решение
Вы не используете операторы коммутатора должным образом. Как они работают, состоит в том, чтобы сравнить каждое значение случая с начальным switch
ценность.
В вашем случае давайте притворимся $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
Вот почему он не работает ..
Я бы порекомендовал придерживаться if .. else
в таком случае.
Другие советы
А empty
Функция возвращает логическое значение 1 или 0 http://uk3.php.net/empty
Тогда как switch / case
операторы проверяют, имеет ли переменная определенное значение и выполняет выражение в зависимости от этого
В случае, если expression 1
должно быть выполнено, если значение $location==1
(вы эффективно просили об этом, когда напечатали switch($location)
),
Таким образом, логика вашего кода выше:
Если $ location == 1, выполнить выражение 1
Если $ location%10000 == 0, выполнить выражение 2
и т. д. и т. д.
это ценность $location==1
?
А switch
Заявление не то же самое, что if/else
утверждение. Операторы коммутатора ищут конкретные значения. Если он находит значение, указанное в данном case
оператор, он запускает код после этого case
утверждение.
Следующий код:
switch($x)
case 1:
// some stuff
break;
case 2:
// some other stuff
break;
default:
// some more stuff
break;
Является эквивалентом этого кода:
if($x == 1){
// some stuff
}
elseif($x == 2){
// some other stuff
}
else{
// some more stuff
}
В принципе, switch
Заявления являются ярлыками для if/elseif/else
Блоки, где вы проверяете равенство одной переменной против куча возможностей.
С empty()
Возвращает 0 или 1, ваш первый case
будет бежать, если $location
равно 1 (если $location
пусто) или 0 (если $location
не пуст). Как будто вы написали следующее:
elseif($location == empty($location)){ ...
Иметь смысл? Вместо использования switch
утверждение, вы, вероятно, хотите следующее:
if(empty($location)){
// ...
}
elseif($location % 10000 == 0){
// ...
}
// ...