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?