isset($)double if / elseif / else。它可以更干净吗?

时间:2011-04-20 10:27:48

标签: php coding-style

好的,我已经建立了这个代码,但我猜它有点难看。 这可以做得更好吗?

if (isset($_GET['lang'])) {
    $lang = $_GET['lang'];
    if ($lang == 'en') {
        $_GET['method']($lang);
    }
    elseif ($lang == 'nl') {
        $_GET['method']($lang);
    }
    else {
        $_GET['method']($lang);
    }
}
else {
    $lang = '';
    $_GET['method']($lang);
}

5 个答案:

答案 0 :(得分:4)

function GET($name, $default=null)
{
    if ( !isset($_GET[$name]) )
        return $default;
    return $_GET[$name];
}

$method = GET('method'); // Don't forget to error-check $method too, or it will be a major security hole!
$method(GET('lang',''));

答案 1 :(得分:0)

无论$ lang的值是多少,您似乎打算$_GET['method']($lang)。所以不要检查价值;只需确定它,然后使用它。

if (isset($_GET['lang'])) { $lang = $_GET['lang']; }
else { $lang = ''; }
$_GET['method']($lang);

答案 2 :(得分:0)

会不会

if (isset($_GET['lang'])){
$lang = $_GET['lang'];
if ($lang == 'en'){
    $_GET['method']($lang);
} elseif ($lang == 'nl'){
    $_GET['method']($lang);
} else {
    $_GET['method']($lang);
} 
} else {
    $lang = '';
    $_GET['method']($lang);
}

完全相同
if (isset($_GET['lang'])){
    $lang = $_GET['lang'];
    $_GET["method"]($lang);
} else {
    $lang = '';
    $_GET['method']($lang);
}

@Highmastdon:要使示例完整,请参阅我的更正

答案 3 :(得分:0)

由于您在每种情况下都在调用$_GET['method']($lang);,包括else,因此您不需要所有这些条件来执行相同的操作;你给出的代码可以写得这么简单:

$lang = isset($_GET['lang']) ? $_GET['lang'] : '';
$_GET['method']($lang);

您甚至可以将这两行合并为一行:

$_GET['method'](isset($_GET['lang']) ? $_GET['lang'] : '');

......虽然这开始变得有点不可读。

但是,我会回应@Vilx所提出的观点 - 调用直接从浏览器指定的函数名称可能是主要安全风险,所以你*真的*需要审核methodlang的内容。 (想象一下,如果网址看起来像?method=eval&lang=rm+index.php

答案 4 :(得分:0)

$_GET['method'](isset($_GET['lang']) ? $_GET['lang'] : '');

但是,请不要这样做。如果用户指定method=eval(或任何其他您不想要的函数),则会有一个巨大的安全漏洞。