If () против switch () - то же самое значение, но другое поведение? - PullRequest
1 голос
/ 02 декабря 2010

Я хотел бы преобразовать условное условие if () в switch () из этого:

if($configuration['application'][$applicationName]['subdomain'] == true){
    foreach($configuration['language'] as $language){
        if($language['abbreviation'].'.'.$configuration['application'][$applicationName]['domain'] == $_SERVER['HTTP_HOST']){
            $_SESSION['language'] = $language['abbreviation'];
        }
    }

    // If no subdomain detected and redirection is enabled, set default language
    if(!isset($_SESSION['language'])){
        $_SESSION['language'] = $configuration['application'][$applicationName]['language'];
    }
}
else {
    $_SESSION['language'] = $configuration['application'][$applicationName]['language'];
}

В это:

switch($configuration['application'][$applicationName]['subdomain']){
    case true:
        foreach($configuration['language'] as $language){
            if($language['abbreviation'].'.'.$configuration['application'][$applicationName]['domain'] == $_SERVER['HTTP_HOST']){
                $_SESSION['language'] = $language['abbreviation'];
                break;
            }
        }
    default:
        $_SESSION['language'] = $configuration['application'][$applicationName]['language'];
        break;
}

Я думаю, оно должно быть таким же, но оноведет себя по-другому ... Переключатель не работает должным образом ...

1 Ответ

1 голос
/ 02 декабря 2010

Я переформатировал ваш код, пожалуйста, убедитесь, что он по-прежнему правильный.

Что касается вашей проблемы, для начала вам не хватает оператора break; в конце вашего оператора case true:,(break внутри цикла foreach просто выходит из цикла, а не самого case).

...