is if elseif elseif possible vs if else ?


is if elseif elseif possible vs if else ?

我是php新手,我真的很困惑,我的代码似乎是正确的,它的工作原理,但不完全。我试图使用会话为用户实现翻译,以便在使用if elseif elseif调用条件时实现其他功能,我是否需要使用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');
}
?>

您可以使用switch语句使代码看起来更整洁:

<>之前 switch($_SESSION['lang']) { case 'it': include(..); break; case 'en': include(..); break; etc.. } 之前

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

我注意到的第一件事是,这里有很多重复的代码,本质上是从多个地方进行查找。如果你重构你的代码,你可以消除很多复杂性。下面用一种简单得多的方式完成了同样的事情:

<?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;

在使用会话时,无论初始化会话还是只是恢复会话,都必须调用session_start(),因此将它从语句中取出并放在页面的顶部。此外,我不完全明白你想要达到什么目的,或者不管什么都失败了。

我认为没有必要使用if/else或switch,因为你所做的只是包含一个文件名的动态部分已经在语言变量中定义的文件。

你也不需要重置$_SESSION['lang'],除非$_GET['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');