Почему соответствующий оператор не выполняется, даже если Echo пустое ($ location) распечатывает 1

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

Вопрос

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){
    // ...
}
// ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top