-9

我是 php 的新手,我真的很困惑我的代码看起来是正确的,它可以工作但不完全。我正在尝试使用会话实现翻译,以便用户在使用 if elseif elseif 调用条件时实现一些其他功能,我是否需要将 hain if 语句与 if else else 一起使用,或者是否可能像我一开始那样。

<?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');
}
?>
4

4 回答 4

5

您可以使用 switch 语句来获得更整洁的代码外观:


switch($_SESSION['lang']) {
    case 'it':
        include(..);
        break;
    case 'en':
        include(..);
        break;

    etc..
}

http://php.net/manual/en/control-structures.switch.php

于 2013-03-05T23:38:25.120 回答
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;
于 2013-03-05T23:47:30.173 回答
0

我认为不需要 if/else 或 switch,因为您所做的只是包含一个名称的动态部分已在语言变量中定义的文件。

除非明确定义了 $_GET['lang'],否则您也不需要重置 $_SESSION['lang']。

这将更有效,并且少于使用 if/else 或基于 lang 值切换条件的代码的一半。

<?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');
于 2013-03-05T23:58:15.767 回答
0

使用会话时session_start(),无论是初始化会话还是恢复会话,都必须调用 ,因此将其从语句中取出并将其放在页面顶部。此外,我不完全了解您要达到的目标或失败的目标。

于 2013-03-05T23:41:29.097 回答