isset()
Функция isset() в PHP проверяет, задана ли переменная и не равна ли она null. Возвращает true, если переменная существует и не равна null.
Введение
Конструкция isset() — встроенная языковая конструкция PHP, которая проверяет, была ли переменная задана. Она возвращает true, если переменная существует и не равна null, и false в противном случае.
Главное, что нужно понять: isset() проверяет только существование, а не истинность. Она возвращает true даже тогда, когда значение равно 0, false, "0" или пустой строке "" — false возвращается только для переменных, которые никогда не были объявлены, были удалены через unset или содержат null.
Это делает isset() безопасным способом проверки ключей массивов и полей форм перед их чтением, позволяя избежать предупреждений «Undefined variable» и «Undefined array key», которые PHP выдаёт при обращении к несуществующим элементам.
На этой странице рассматривается синтаксис isset(), её поведение с null, 0 и отсутствующими ключами массивов, проверка нескольких переменных одновременно, а также отличия от родственных функций empty(), is_null() и array_key_exists().
Синтаксис
Синтаксис конструкции isset() выглядит следующим образом:
Синтаксис PHP isset()
bool isset(mixed $var [, mixed $... ])Конструкция принимает один или несколько параметров: $var и необязательные дополнительные параметры, разделённые запятыми. Каждый параметр представляет переменную, которую нужно проверить. Конструкция возвращает true, если все переменные существуют и не равны null, и false в противном случае.
Пример использования
Ниже приведён пример использования конструкции isset() в PHP:
Пример PHP isset()
<?php
$var1 = "hello";
$var2 = null;
$var3 = 0;
$array = ['key' => 'value'];
if (isset($var1)) {
echo '$var1 is set and is not null' . "\n";
}
if (isset($var2)) {
echo '$var2 is set and is not null' . "\n";
} else {
echo '$var2 is not set or is null' . "\n";
}
if (isset($var3)) {
echo '$var3 is set (value is 0)' . "\n";
}
if (isset($array['key'])) {
echo "Array key 'key' is set" . "\n";
}
?>В этом примере определены несколько переменных и массив. С помощью конструкции isset() проверяется, задана ли каждая переменная или ключ массива. Первый оператор if возвращает true, так как $var1 задана. Второй оператор if возвращает false, поскольку $var2 равна null, поэтому выполняется блок else. Третий оператор if возвращает true, так как $var3 равна 0 (демонстрируя, что isset() проверяет существование, а не истинность). Четвёртый оператор if возвращает true, потому что ключ массива 'key' существует.
Проверка нескольких переменных одновременно
isset() принимает несколько аргументов и возвращает true только тогда, когда каждый аргумент задан и не равен null. Как только хотя бы один из них отсутствует или равен null, весь вызов возвращает false. Это удобно для проверки наличия группы обязательных значений перед продолжением выполнения:
<?php
$name = "Ada";
$email = "[email protected]";
$phone = null;
if (isset($name, $email)) {
echo "Both name and email are set" . "\n";
}
if (isset($name, $email, $phone)) {
echo "All three are set" . "\n";
} else {
echo "At least one of name, email, phone is missing or null" . "\n";
}
?>Поскольку $phone равна null, второй вызов isset() возвращает false, хотя два других значения заданы.
Вложенные массивы и отсутствующие ключи
Одна из распространённых причин использовать isset() — чтение глубоко вложенных данных, например из $_POST или декодированной JSON-структуры, где на любом уровне может отсутствовать ключ. isset() безопасно прерывает проверку: если промежуточный ключ не существует, она возвращает false вместо того, чтобы вызвать предупреждение.
<?php
$user = [
'profile' => [
'name' => 'Grace',
],
];
var_dump(isset($user['profile']['name'])); // bool(true)
var_dump(isset($user['profile']['age'])); // bool(false) - key missing
var_dump(isset($user['settings']['theme'])); // bool(false) - 'settings' missing entirely
?>Обратите внимание: isset() возвращает false для существующего ключа, значение которого равно null. Если нужно различить «ключ существует, но содержит null» и «ключ отсутствует», используйте вместо неё array_key_exists().
isset() и empty(), is_null(), array_key_exists()
Эти четыре конструкции легко перепутать. В таблице показано, что каждая из них возвращает для переменной $x с разными значениями:
Значение $x | isset($x) | empty($x) | is_null($x) |
|---|---|---|---|
"text" | true | false | false |
0 / 0.0 / "0" | true | true | false |
"" (пустая строка) | true | true | false |
null | false | true | true |
| не определена / unset | false | true | предупреждение + true |
Основные выводы:
- Используйте
isset(), когда нужно знать, существует ли что-то и не равно лиnull— она никогда не выдаёт предупреждение для неопределённых переменных. - Используйте
empty(), когда нужно знать, является ли значение «ложным» (0,"",null,false, пустой массив и т. д.). - Используйте
is_null(), когда вас специально интересует значениеnull— но учтите, что она выдаёт предупреждение, если переменная не была объявлена. - Используйте
array_key_exists(), когда ключ может законно содержатьnull, но вы всё равно хотите определить его наличие.
Краткая запись с оператором объединения с null
Начиная с PHP 7, оператор объединения с null ?? является лаконичной альтернативой проверке через isset() с последующим запасным значением. Выражение $a ?? $b возвращает $a, если оно задано и не равно null, иначе — $b, без каких-либо предупреждений:
<?php
$config = ['timeout' => 30];
// Verbose: explicit isset()
$retries = isset($config['retries']) ? $config['retries'] : 5;
echo $retries . "\n"; // 5
// Concise: same result with the ?? operator
$timeout = $config['timeout'] ?? 60;
echo $timeout . "\n"; // 30
?>Используйте ??, когда просто нужно значение по умолчанию; оставляйте isset(), когда нужен сам булев результат — например, в составе более сложного условия.
Заключение
Конструкция isset() — полезный инструмент для проверки того, задана ли переменная в PHP. Её можно использовать, чтобы убедиться в существовании переменной перед выполнением операций с ней или для обработки заданных и незаданных переменных по-разному. Применяя эту конструкцию, разработчики могут гарантировать, что их код работает с ожидаемыми данными, и избегать ошибок, возникающих при работе со значениями null.