是if elseif elseif ifif else if else else?

时间:2013-03-05 23:34:35

标签: php if-statement

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

4 个答案:

答案 0 :(得分:5)

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


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

    etc..
}

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

答案 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');