Isset: примеры (PHP)
isset(mixed $var, mixed ...$vars): boolФункция isset() в PHP проверяет, была ли установлена переменная и не равна ли она значению null. Эта функция возвращает true, если переменная существует и ее значение не null, в противном случае возвращается false.
Основное применение функции - проверка существования переменных, особенно полученных из внешних источников, таких как данные форм, параметры URL или массивы сессий, перед их использованием в коде.
Функция isset() принимает переменное количество аргументов (от одного до нескольких):
- var - первый аргумент, проверяемая переменная
- ... - дополнительные переменные для проверки (необязательные)
Функция возвращает true только если все переданные переменные существуют и не равны null.
$var = 'значение';
echo isset($var) ? 'true' : 'false';true
echo isset($undefinedVar) ? 'true' : 'false';false
$var = null;
echo isset($var) ? 'true' : 'false';false
$a = 1;
$b = null;
$c = 'test';
echo isset($a, $b, $c) ? 'true' : 'false';false
$array = ['key' => 'value'];
echo isset($array['key']) ? 'true' : 'false';true
В PHP существуют другие функции для проверки переменных:
Проверяет, пуста ли переменная. Возвращает true для пустой строки, 0, null, false, пустого массива и необъявленной переменной.
$var = '';
echo empty($var) ? 'true' : 'false';true
Проверяет существование ключа в массиве, даже если его значение равно null.
$array = ['key' => null];
echo array_key_exists('key', $array) ? 'true' : 'false';true
Определяет, является ли переменная null, но вызывает предупреждение для необъявленных переменных.
$var = null;
echo is_null($var) ? 'true' : 'false';true
Функция isset() предпочтительнее для проверки существования переменных перед использованием, особенно внешних данных. Функция empty() удобна для проверки заполненности значений, но имеет более широкую трактовку "пустоты".
При проверке приватных или защищенных свойств извне класса возникает ошибка:
class Test {
private $privateProp = 'value';
}
$obj = new Test();
var_dump(isset($obj->privateProp));Fatal error: Cannot access private property Test::$privateProp
Попытка проверить несколько уровней вложенности без промежуточных проверок:
$data = [];
var_dump(isset($data['level1']['level2']['level3']));false
Разное поведение при проверке значений 0 и пустой строки:
$value = 0;
var_dump(isset($value));
var_dump(empty($value));bool(true) bool(true)
Попытка проверки возвращаемого значения функции без его сохранения:
function getValue() {
return null;
}
var_dump(isset(getValue()));Parse error: syntax error
В PHP 8.0 функция isset() может использоваться в выражениях совместно с оператором nullsafe:
class User {
public ?Address $address = null;
}
class Address {
public string $street;
}
$user = new User();
var_dump(isset($user->address->street));bool(false)
Улучшена обработка isset() с элементами массивов и свойств объектов, возвращающих null. Функция стала более стабильной при работе с большими уровнями вложенности.
Начиная с PHP 7.4, функция isset() получила внутренние оптимизации для более быстрой проверки переменных, особенно при работе с массивами.
$config = [
'db' => [
'host' => 'localhost',
'port' => null
]
];
$hostExists = isset($config['db']['host']);
$portExists = isset($config['db']['port']);
$userExists = isset($config['db']['user']);
echo "Host exists: " . ($hostExists ? 'yes' : 'no') . "
";
echo "Port exists: " . ($portExists ? 'yes' : 'no') . "
";
echo "User exists: " . ($userExists ? 'yes' : 'no') . "
";Host exists: yes Port exists: no User exists: no
// Без проверки (опасно)
// $value = $_GET['param'];
// С проверкой (безопасно)
if (isset($_GET['param'])) {
$value = $_GET['param'];
echo "Значение параметра: $value";
} else {
echo "Параметр не передан";
}$requiredFields = ['name', 'email', 'phone'];
$allFieldsPresent = true;
foreach ($requiredFields as $field) {
if (!isset($_POST[$field])) {
$allFieldsPresent = false;
break;
}
}
echo "Все поля заполнены: " . ($allFieldsPresent ? 'да' : 'нет');$default = 'значение по умолчанию';
$result = isset($userInput) ? $userInput : $default;
// Аналогично с оператором ?? (PHP 7+)
$result = $userInput ?? $default;class Product {
public $id;
public $name;
private $price;
public function __construct($id, $name) {
$this->id = $id;
$this->name = $name;
}
}
$product = new Product(1, 'Товар');
$properties = ['id', 'name', 'price', 'undefined'];
foreach ($properties as $prop) {
echo "$prop: " . (isset($product->$prop) ? 'есть' : 'нет') . "
";
}id: есть name: есть price: нет undefined: нет
Isset в Javascript
В JavaScript используется оператор typeof и сравнение с undefined:
let variable;
console.log(typeof variable !== 'undefined' && variable !== null);
console.log(variable !== undefined && variable !== null);false false
Isset в Python
В Python проверка осуществляется через оператор in для словарей или через try/except:
data = {'key': 'value'}
print('key' in data)
print(data.get('key') is not None)True True
Isset в MySQL
В MySQL используется функция ISNULL() и оператор IS NOT NULL:
SELECT ISNULL(NULL) as result;
SELECT column IS NOT NULL FROM table;result: 1
Isset в Java
В Java проверка на null выполняется прямым сравнением:
String str = null;
System.out.println(str != null);false
Основное отличие PHP функции isset() от аналогов в других языках - возможность проверки нескольких переменных одновременно и отсутствие ошибок при проверке необъявленных переменных.