Я хотел бы иметь чистый, элегантный способ установить переменную для параметра 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; }
Я попытался использовать функцию обратного вызова, которая возвращает 0, если значение равно нулю или не является числовым, но если параметр GET ‘id’ не установлен, обратный вызов даже не вызывается — он просто устанавливает $get_id
к нулю.
Нет ничего страшного в том, чтобы включить оператор else, просто подумал, что я могу упустить некоторые функции filter_input
,
filter_input
функция принимает options
параметр. Каждый фильтр принимает различные параметры. Например, FILTER_VALIDATE_INT
фильтр может принять default
, min_range
а также max_range
опции как описано здесь.
$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
Вы можете использовать опцию по умолчанию для достижения этой цели. Если значение не установлено, то значение по умолчанию будет присвоено, например, как показано ниже
$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');
здесь будет возвращено значение или значение по умолчанию, здесь оно равно нулю.