在检查URL查询值是否合法时,比较下面两种方法时最好的方法是什么?他们都工作,但我想我会问,以防万一我可能忽视了什么。
切换vs if / else + in_array()
/*
example.com/page/my-value
^ example.com/page.php?q=my-value
*/
$page = null;
# OPTION A
$valid_pages = array('my-value-1', 'my-value-2', 'my-value-3');
if (in_array($_GET['q'], $valid_pages)) {
$page = $_GET['q'];
} else {
header("location: http://www.example.com");
exit;
}
#OPTION B
switch ($_GET['q']) {
case 'my-value-1':
case 'my-value-2':
case 'my-value-3':
$page = $_GET['q'];
break;
default:
header("location: http://www.example.com");
exit;
break;
}
# Do something with $page
答案 0 :(得分:0)
如果您只使用几个选项,我会说转换语句。但是,当代码变大时,这段代码将无法管理。
有些功能比in_array()
快。你看,它实际上很慢。
PHP允许您按字符串命名数组键。如果我正确理解你的意图,你可以通过设置数组键而不是值来改善,就像这样;
$valid_pages = array('my-value-1' => '', 'my-value-2' => '', 'my-value-3' => '');
然后你可以通过$_GET
简单地调用正确的数组键,如下所示:
if(isset($valid_pages[$_GET['q']]){
//valid page
}
else{
//not a valid page,
}
像这样的系统不仅速度快,而且非常动态!将数组添加到数组时,这不会中断。基本上,你只需要编辑一个地方而不是3个地方,而不必每次都实际循环一个数组。 (in_array()
真的很慢!)