Filter has var: примеры (PHP)
filter_has_var(int $input_type, string $var_name): boolОписание функции filter_has_var
Функция filter_has_var проверяет, существует ли переменная указанного типа ввода. Она применяется для валидации наличия данных в суперглобальных массивах $_GET, $_POST, $_COOKIE, $_SERVER и $_ENV до их обработки.
Функция принимает два обязательных параметра:
- $type (целое число) — константа, определяющая тип ввода:
- INPUT_GET — переменные GET-запроса.
- INPUT_POST — переменные POST-запроса.
- INPUT_COOKIE — переменные cookies.
- INPUT_SERVER — серверные переменные.
- INPUT_ENV — переменные окружения.
- $variable_name (строка) — имя проверяемой переменной.
Функция возвращает true, если переменная существует и не равна null, иначе возвращает false.
Примеры использования
<?php
// Предположим, URL: /?id=10
if (filter_has_var(INPUT_GET, 'id')) {
echo 'Переменная id существует';
} else {
echo 'Переменная отсутствует';
}
?>Переменная id существует
<?php
// После отправки формы с полем username
if (filter_has_var(INPUT_POST, 'username')) {
echo 'Имя пользователя получено';
}
?><?php
// Если в браузере установлена cookie 'session_id'
var_dump(filter_has_var(INPUT_COOKIE, 'session_id'));
?>bool(true)
<?php
var_dump(filter_has_var(INPUT_SERVER, 'REQUEST_METHOD'));
?>bool(true)
Похожие функции в PHP
Функция isset() проверяет существование переменной или элемента массива и не равен ли он null. Основное отличие — filter_has_var работает только с суперглобальными массивами через типы ввода, обеспечивая более строгую проверку источника данных.
Функция empty() проверяет, пуста ли переменная. Она возвращает true для несуществующих переменных, пустых строк, нуля и null. filter_has_var не проверяет значение, только наличие.
Функция filter_input() не только проверяет наличие переменной, но и фильтрует её значение. Её удобно использовать после проверки существования переменной с помощью filter_has_var для безопасного получения данных.
Аналоги в других языках
В JavaScript для проверки параметров URL можно использовать URLSearchParams.
// Проверка GET-параметра 'id' в браузере
const urlParams = new URLSearchParams(window.location.search);
console.log(urlParams.has('id')); // true или falseВ веб-фреймворке Flask для проверки наличия параметров в запросе используются методы request.args.get() или request.form.get().
from flask import request
# Проверка GET-параметра
id_exists = 'id' in request.args
print(id_exists) # True или False
# Проверка POST-данных
username_exists = 'username' in request.form
print(username_exists)В MySQL нет прямой аналогии, но в хранимых процедурах можно проверять наличие входных параметров с помощью условных конструкций.
CREATE PROCEDURE check_param(IN param INT)
BEGIN
IF param IS NOT NULL THEN
SELECT 'Переменная существует';
END IF;
END;Типичные ошибки
<?php
// Использование несуществующей константы
var_dump(filter_has_var(999, 'name'));
?>bool(false)
<?php
// Имя переменной должно быть строкой
var_dump(filter_has_var(INPUT_GET, 123));
?>bool(false)
<?php
// Если в $_GET['test'] передано значение null
// URL: /?test
var_dump(filter_has_var(INPUT_GET, 'test'));
?>bool(false)
Некоторые серверные переменные, такие как 'PHP_SELF', могут быть недоступны через INPUT_SERVER в зависимости от конфигурации.
Изменения в версиях PHP
В PHP 8.0.0 функция filter_has_var не претерпела значительных изменений. Однако, начиная с PHP 8.0.0, многие функции фильтрации стали более строгими к типам передаваемых аргументов. В более ранних версиях, например PHP 5.6, функция работала аналогично, но в целом расширение Filter было существенно улучшено в PHP 7 и 8.
Расширенные примеры
<?php
$required = ['name', 'email', 'phone'];
$missing = [];
foreach ($required as $field) {
if (!filter_has_var(INPUT_POST, $field)) {
$missing[] = $field;
}
}
if (!empty($missing)) {
echo 'Отсутствуют поля: ' . implode(', ', $missing);
}
?><?php
if (filter_has_var(INPUT_GET, 'age')) {
$age = filter_input(INPUT_GET, 'age', FILTER_VALIDATE_INT);
if ($age !== false) {
echo 'Возраст: ' . $age;
}
}
?><?php
if (filter_has_var(INPUT_SERVER, 'REQUEST_METHOD')) {
$method = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_STRING);
if ($method === 'POST') {
echo 'Обработка POST-запроса';
}
}
?><?php
// Проверка наличия переменной окружения PATH
if (filter_has_var(INPUT_ENV, 'PATH')) {
echo 'Переменная PATH установлена';
}
?><?php
// Безопасное получение и фильтрация всех GET-параметров
if (!empty($_GET)) {
$filtered = [];
foreach (array_keys($_GET) as $key) {
if (filter_has_var(INPUT_GET, $key)) {
$filtered[$key] = filter_input(INPUT_GET, $key, FILTER_SANITIZE_SPECIAL_CHARS);
}
}
print_r($filtered);
}
?>