W3docs

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 с разными значениями:

Значение $xisset($x)empty($x)is_null($x)
"text"truefalsefalse
0 / 0.0 / "0"truetruefalse
"" (пустая строка)truetruefalse
nullfalsetruetrue
не определена / unsetfalsetrueпредупреждение + 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.

Практика

Практика
Какова функция isset() в PHP?
Какова функция isset() в PHP?
Was this page helpful?