好的,我已经建立了这个代码,但我猜它有点难看。 这可以做得更好吗?
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);
}
答案 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所提出的观点 - 调用直接从浏览器指定的函数名称可能是主要安全风险,所以你*真的*需要审核method
和lang
的内容。 (想象一下,如果网址看起来像?method=eval&lang=rm+index.php
)
答案 4 :(得分:0)
$_GET['method'](isset($_GET['lang']) ? $_GET['lang'] : '');
但是,请请不要这样做。如果用户指定method=eval
(或任何其他您不想要的函数),则会有一个巨大的安全漏洞。