我是php的新手,我真的很困惑我的代码似乎是正确的,它可以工作但不完全。我正在尝试使用session实现一个翻译,当用if if if elseif调用条件时,用户实现一些其他函数,我是否需要使用if if else的hain if语句,或者是否有可能像我先做的那样。
<?php
if ($_GET['lang']=='fr') {
include('fr.php');
session_start();
$_SESSION['lang']='fr';
}
elseif ($_GET['lang']=='en') {
include('gb.php');
session_start();
$_SESSION['lang']='en';
}
elseif ($_GET['lang']=='it') {
include('it.php');
session_start();
$_SESSION['lang']='it';
}
elseif ($_SESSION['lang']=='fr')
{
include('fr.php');
}
elseif ($_SESSION['lang']=='en')
{
include('gb.php');
}
elseif ($_SESSION['lang']=='it')
{
include('it.php');
}
else
{
include('fr.php');
}
?>
答案 0 :(得分:5)
您可以使用switch语句获得更整洁的代码外观:
switch($_SESSION['lang']) {
case 'it':
include(..);
break;
case 'en':
include(..);
break;
etc..
}
答案 1 :(得分:1)
我在这里注意到的第一件事是,有很多重复的代码,本质上是从多个地方查找的。如果重构代码,可以消除大部分复杂性。这是以更简单的方式完成的事情:
<?php
define('DEFAULT_LANG', 'fr');
$lang_inc = array(
'fr' => 'fr.php',
'en' => 'gb.php',
'it' => 'it.php',
);
session_start()
if ($_GET['lang'] && array_key_exists('lang', $_GET)) {
$lang = $_GET['lang'];
} elseif ($_SESSION['lang'] && array_key_exists('lang', $_SESSION)) {
$lang = $_SESSION['lang'];
} else {
$lang = DEFAULT_LANG;
}
$lang_file = $lang_inc[$lang];
include($lang_file);
$_SESION['lang'] = $lang;
答案 2 :(得分:0)
使用会话时,无论是初始化会话还是仅恢复会话,您都必须致电session_start()
,因此请将其从论坛中删除并将其置于页面顶部。此外,我并不完全理解你想要实现的目标或任何失败的目标。
答案 3 :(得分:0)
我认为不需要if / else或switch,因为您所做的只是包含一个文件,该名称的动态部分已在语言变量中定义。
除非明确定义$ _GET ['lang'],否则您也不需要重置$ _SESSION ['lang']。
这将更有效,并且不到基于lang值的if / else或switch条件使用的代码的一半。
<?php
session_start();
// Only set $_SESSION[$lang] if it is not set
// or if $_GET['lang'] is explicitly defined
if (isset($_GET['lang']) || !isset($_SESSION['lang'])) {
// Array of allowed languages
$allowed = array('fr', 'en', 'it');
// Set fr to default if lang isn't defined or not allowed
$_SESSION['lang'] = isset($_GET['lang']) && in_array($_GET['lang'], $allowed) ? $_GET['lang'] : 'fr';
}
// dynamically include file
include($_SESSION['lang'] . '.php');