Bu php switch deyimi basitleştirmek nasıl?

4 Cevap php

Ben bunu değiştirmek istiyorum:

// 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';
}

Bu gibi bir şey içine:

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

(Ben yukarıda dahil final-çıkış-bir şey yaparsak $lang_file değişken gereksiz olur sanırım)

Ben bütün switch kısmını atlayabilirsiniz böylece. Ben diğer kombinasyonları denedim ama işe görünmüyor. Herhangi bir öneriniz?

4 Cevap

Bunu yapabilirsiniz:

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';
}

Ya da bir dizi ve kullanımını in_array kullanın değer dizide olup olmadığını görmek için:

$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';
}

Varsayılan beri Hatta her iki durumda en ihmal olabilir.

$lang_file = 'lang.' . ($_SESSION['lang']) . 'php';
if(!file_exists($lang_file))
{
    $lang_file = 'lang.en.php';
}

Bu enjeksiyonlar karşı güvenli olmamasına rağmen. Ancak, sen kodu değiştirmeden yeni dil kodlarını eklemek için izin vermez.

Veya:


$allowed   = array('en', 'es', 'zh-tw', 'zh-cn');
$lang_file = (in_array($_SESSION['lang'], $allowed))
           ? 'lang.'.$_SESSION['lang'].'.php' : 'lang.en.php';

Bu gayet iyi çalışır

$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';
}

Bu, sen kodunu Yorum yok yeni bir dil ekleyerek her zaman düzenlemek zorunda olmayacak ve güvenlik konusunda endişelenmenize gerek olmayacaktır.