我希望有一个干净,优雅的方法,如果所述参数设置(和数字),则将变量设置为GET参数,如果不是,则设置为0(或其他默认值)集。
现在我有:
if (($get_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
$opened_staff['id'] = $get_id;
// some database queries etc.
} else { $opened_staff['id'] = 0; }
我尝试使用一个回调函数,如果值为null或不是数字,则返回0,但是如果GET参数' id'没有设置,回调甚至不会被调用 - 它只是将$get_id
设置为空。
包含else语句没什么大不了的,只是想我可能会错过filter_input
的某些功能。
答案 0 :(得分:15)
filter_input
函数接受options
参数。每个过滤器都接受不同的选例如,FILTER_VALIDATE_INT
过滤器可以接受default
,min_range
和max_range
个选项as described here。
$get_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, array("options" => array(
"default" => 0,
"min_range" => 0
)));
var_dump($get_id);
// $get_id = 0 when id is not present in query string, not an integer or negative
// $get_id = <that integer> otherwise
答案 1 :(得分:3)
您可以使用默认选项来实现此目的,如果未设置值,则默认值将获得分配,示例如下所示
$options = array( 'options' => array('default'=> 0) );
$valid = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $options);
filter_input()不读取_POST / _GET / _COOKIE / _SERVER / _ENV
$opened_staff['id'] = 0;
if($valid){
$opened_staff['id'] = $_GET['id'];
}
您可以使用某些类来实现此目的。 [注意: - 这只是一个例子]
class RequestFilter{
public static function get_filter_int($id){
$options = array( 'options' => array('default'=> 0) );
$valid = filter_input(INPUT_GET, $id, FILTER_VALIDATE_INT, $options);
if($valid){
return $_GET[$id]; // Value will return
}
return $valid; // Default will return
}
}
$opened_staff['id'] = RequestFilter::get_filter_int('id');
这里将返回值或默认值,此处为零。