有没有一种简洁的方法来测试PHP中的GET参数组合?
下面的代码检查GET参数。页面上有两个选项,用于按类型和年龄组筛选列表 我正在寻找一种方法来重构测试类型/年龄组合的条件。有没有更清晰/简洁的方式来写有没有一种简洁的方法来测试PHP中的GET参数组合?,php,conditional,Php,Conditional,下面的代码检查GET参数。页面上有两个选项,用于按类型和年龄组筛选列表 我正在寻找一种方法来重构测试类型/年龄组合的条件。有没有更清晰/简洁的方式来写 if ( isset($_REQUEST['type']) || isset($_REQUEST['age']) ) { // we need to do something $type = ( $_REQUEST['type'] == 'all' ? false : (int)($_REQUEST['type']) ); $age
if ( isset($_REQUEST['type']) || isset($_REQUEST['age']) )
{
// we need to do something
$type = ( $_REQUEST['type'] == 'all' ? false : (int)($_REQUEST['type']) );
$age = ( $_REQUEST['age'] == 'all' ? false : (int)($_REQUEST['age']) );
// test the possible type/age combinations
if ($type && $age)
{
$cats = $type . "," . $age;
}
elseif ($type)
{
$cats = $type;
}
elseif ($age)
{
$cats = $age;
}
else
{
$cats = false;
}
// do stuff with $cats;
}
如果['type']和['age']都是“all”,则结果将是“”,即字符串(0)。所以这是不一样的。这是否是一个问题取决于如何使用$cat。例如,if(!$cat)
仍然有效,因为在布尔上下文中空字符串被转换为false
编辑:哦,还有另一个区别。我在没有(特定)回调的情况下使用
如果未提供回调,则将删除所有等于FALSE(请参阅)的输入项。
例如,$\u REQUEST=array('type'=>'0','age'=>'0')
也将导致$cat=”“
在你的背景下,这是一个问题吗 如果['type']和['age']都是“all”,则结果将是“”,即字符串(0)。所以这是不一样的。这是否是一个问题取决于如何使用$cat。例如,
if(!$cat)
仍然有效,因为在布尔上下文中空字符串被转换为false
编辑:哦,还有另一个区别。我在没有(特定)回调的情况下使用
如果未提供回调,则将删除所有等于FALSE(请参阅)的输入项。
例如,$\u REQUEST=array('type'=>'0','age'=>'0')
也将导致$cat=”“
这在您的上下文中是一个问题吗?不确定它是否更清晰,但至少它更简洁了一点…:-)
[编辑]给出一个更简单的版本…不确定是否更清晰,但至少更简洁一些…:-)
[编辑]提供更简单的版本…避免使用请求超全局,因为数据可能来自意外的来源(POST、GET和COOKIE)。避免使用请求超全局,因为数据可能来自意外的来源(POST、GET和COOKIE)。请注意,避免
$\u请求
,并明确使用$\u GET
或$\u POST
更安全。有助于防止CSRF。请注意,避免$\u请求
,并明确使用$\u GET
或$\u POST
更安全。有助于对抗CSRF。
$cat = array(
$_REQUEST['type'] == 'all' ? false : intval($_REQUEST['type']),
$_REQUEST['age'] == 'all' ? false : intval($_REQUEST['age'])
);
$cat = join(',', array_filter($cat));
echo $cat;
$cats = str_replace('all', '', "${_GET['type']},${_GET['age']}");
$cats = preg_replace('/^,|,$/', '', $cats);