Как упростить этот оператор php switch? - PullRequest
4 голосов
/ 16 марта 2010

Я хотел бы изменить это:

// use appropiate lang.xx.php file according to the value of the $lang
switch ($_SESSION['lang']) {
case 'en':
 $lang_file = 'lang.en.php';
 break;

case 'es':
 $lang_file = 'lang.es.php';
 break;

case 'zh-tw':
 $lang_file = 'lang.zh-tw.php';
 break;

case 'zh-cn':
 $lang_file = 'lang.zh-cn.php';
 break;

default:
 $lang_file = 'lang.en.php';
}

примерно так:

//include file for final output
 include_once 'languages/lang.'.$_SESSION['lang'].'php;

(я думаю, что переменная $lang_file станет избыточной, если я выполню команду include-final-output-thing выше)

Так что я могу пропустить всю switch часть. Я пробовал другие комбинации, но они не работают. Есть предложения?

Ответы [ 4 ]

17 голосов
/ 16 марта 2010

Вы можете сделать это:

switch ($_SESSION['lang']) {
case 'en':
case 'es':
case 'zh-tw':
case 'zh-cn':
    $lang_file = 'lang.'.$_SESSION['lang'].'.php';
    break;

default:
    $lang_file = 'lang.en.php';
}

Или вы используете массив и используете in_array, чтобы увидеть, есть ли значение в массиве:

$languages = array('en', 'es', 'zh-tw', 'zh-cn');
if (in_array($_SESSION['lang'], $languages)) {
    $lang_file = 'lang.'.$_SESSION['lang'].'.php';
} else {
    $lang_file = 'lang.en.php';
}

Вы даже можете опустить en в обоих случаях, так как это значение по умолчанию.

2 голосов
/ 16 марта 2010

Или:


$allowed   = array('en', 'es', 'zh-tw', 'zh-cn');
$lang_file = (in_array($_SESSION['lang'], $allowed))
           ? 'lang.'.$_SESSION['lang'].'.php' : 'lang.en.php';
2 голосов
/ 16 марта 2010
$lang_file = 'lang.' . ($_SESSION['lang']) . 'php';
if(!file_exists($lang_file))
{
    $lang_file = 'lang.en.php';
}

хотя он не защищен от инъекций. Однако он позволяет добавлять новые языковые коды без изменения кода.

0 голосов
/ 16 марта 2010

Это будет прекрасно работать

$lang_file_tmp = 'lang.' . $_SESSION['lang'] . '.php';
if ( preg_match( '/^[a-zA-Z\-]{2,5}$/', $_SERSSION['lang'] ) && file_exists( $lang_file_tmp ) ) { 
    $lang_file = $lang_file_tmp;
} else {
    $lang_file = 'lang.en.php';
}

При этом вам не придется редактировать код каждый раз, когда вы добавляете новый язык, и вам не придется беспокоиться о безопасности.

...