W3docs

isset

Функция isset() в PHP проверяет, задана ли переменная и не равна ли она null. Разбираем синтаксис, примеры и отличия от empty() и оператора ??.

Функция isset() в PHP

isset() — это языковая конструкция PHP, которая возвращает true, если переменная существует (была присвоена) и не равна null. Она возвращает false, если переменная никогда не была задана, явно была установлена в null или была удалена с помощью unset().

Поскольку обращение к неопределённой переменной вызывает предупреждение Warning: Undefined variable в PHP, isset() — это стандартный, безопасный способ проверить «есть ли у меня здесь используемое значение?» перед тем как его использовать. Например, для защиты доступа к $_GET, $_POST или ключам массива, которые могут отсутствовать.

В этой главе рассматриваются синтаксис, форма с несколькими аргументами, поведение с массивами и свойствами объектов, а также сравнение со связанными инструментами — empty() и оператором объединения с null.

Синтаксис

isset(mixed $var, mixed ...$vars): bool

Минимальная проверка выглядит так:

if (isset($myVariable)) {
  echo "The variable is set.";
} else {
  echo "The variable is not set.";
}

isset() — это языковая конструкция, а не вызов функции, поэтому вам не нужно ничего подключать или импортировать, и вы можете передать сразу несколько переменных (описано ниже).

Базовые примеры

<?php

// Example 1 — an assigned, non-null variable
$myVariable = "Hello, world!";
echo isset($myVariable) ? "set" : "not set"; // set
echo PHP_EOL;

// Example 2 — a variable that was never declared
echo isset($someOtherVariable) ? "set" : "not set"; // not set
echo PHP_EOL;

// Example 3 — a variable explicitly set to null
$empty = null;
echo isset($empty) ? "set" : "not set"; // not set

Вывод:

set
not set
not set

Третий случай — главная ловушка: присвоение null заставляет isset() вернуть false, даже если переменная технически существует. Если вам нужно различить «никогда не была объявлена» и «объявлена, но равна null», используйте is_null() или array_key_exists().

«Попробуйте сами» недоступно для этого примера.

Проверка нескольких переменных одновременно

Если передать более одного аргумента, isset() возвращает true только если каждый аргумент задан и не равен null. Это удобно для проверки того, что все обязательные поля формы пришли вместе.

<?php

$name  = "Ada";
$email = "[email protected]";
$phone = null;

var_dump(isset($name, $email));         // bool(true)
var_dump(isset($name, $email, $phone)); // bool(false) — $phone is null

isset() с массивами

isset() работает с элементами массива и безопасно проверяет вложенные ключи без возникновения предупреждений при отсутствии промежуточного ключа.

<?php

$user = [
  'name'    => 'Ada',
  'address' => ['city' => 'London'],
];

var_dump(isset($user['name']));             // bool(true)
var_dump(isset($user['missing']));          // bool(false)
var_dump(isset($user['address']['city']));  // bool(true)
var_dump(isset($user['address']['zip']));   // bool(false) — no warning

Обратите внимание: isset($array['key']) возвращает false, если значение по этому ключу равно null. Если ключ может законно хранить null, и вам важно лишь наличие ключа, используйте array_key_exists().

isset() vs. empty() vs. оператор объединения с null

Эти три инструмента часто путают. В таблице показано, что каждый из них возвращает для одних и тех же входных данных:

Значение $xisset($x)empty($x)
"hello"truefalse
0 или "0" или ""truetrue
nullfalsetrue
не определеноfalsetrue

Используйте isset(), чтобы спросить «есть ли здесь реальное значение?», и empty() — чтобы спросить «это значение отсутствует или является ложным (пустая строка, 0, false, пустой массив)?».

Начиная с PHP 7, оператор объединения с null ?? опирается на семантику isset() и позволяет задать значение по умолчанию в одном выражении — это идиоматическая замена тернарному оператору isset() ? : :

<?php

$config = ['theme' => 'dark'];

// Verbose, pre-PHP 7 style:
$theme = isset($config['theme']) ? $config['theme'] : 'light';

// Equivalent with the null coalescing operator:
$theme = $config['theme'] ?? 'light';

echo $theme; // dark

$config['missing'] ?? 'light' вычисляется в 'light' без предупреждений — именно потому, что ?? под капотом использует isset().

Когда использовать isset()

  • Защита необязательных данных запроса: if (isset($_GET['page'])) { ... }.
  • Проверка обязательных полей перед обработкой формы (isset($a, $b, $c)).
  • Безопасное чтение потенциально отсутствующих ключей массива в конфигурации или данных, декодированных из JSON.
  • Ленивая инициализация значения только один раз: $cache ??= computeExpensiveValue();.

Используйте другой инструмент, если нужно считать null как «присутствующее» (array_key_exists()), проверить содержимое объекта или массива на ложность (empty()) или полностью удалить переменную (unset()).

Практика

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