Menu

PHP isset(): проверка переменной и ключа массива

isset($var) возвращает true, когда переменная существует и не равна null, и false в остальных случаях, без всяких предупреждений. Она проверяет и ключи массивов, и свойства объектов: isset($user['email']). isset с несколькими переменными, вложенные ключи, isset и empty, isset и array_key_exists, проверка отправки формы.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

isset($var) возвращает true, если переменная существует и её значение не null. Для неопределённой переменной, удалённой через unset или хранящей null, она возвращает false и никогда не печатает предупреждений.

isset() смотрит только на то, есть ли что-то на месте. Значение, которое задано, но пусто, например 0, "" или [], всё равно даёт true. Если нужно "задано и не пусто", используйте empty с отрицанием.

Проверка ключа массива через isset

Чаще всего isset() используют именно так. Чтение несуществующего ключа в обычной конфигурации PHP печатает Warning: Undefined array key; предварительная проверка через isset() этого не делает. Она работает и для вложенных ключей и тихо останавливается на первом отсутствующем уровне.

Когда нужно только значение или значение по умолчанию, $user["website"] ?? "none" делает ту же проверку за один шаг. Смотрите оператор объединения с null.

isset с несколькими переменными

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

isset для строк и объектов

Для строки isset($str[5]) проверяет, есть ли символ на позиции 5, это быстрая проверка длины. Для объекта проверяется свойство; если у класса с закрытыми данными определён метод __isset(), isset() вызывает его.

isset, empty и is_null

Выберите значение $x в таблице, чтобы сравнить три проверки и простое приведение (bool). Каждую ячейку вычислил PHP 8.3.

isset, empty и is_null для каждого значения $x
Point at or tap a cell to read it as PHP.
$xissetemptyis_nullbool
null
false
0
"0"
""
" "
[]
"a"
1
0.0
"0.0"
Every cell computed by PHP 8.3.19.

Что стоит запомнить:

  • isset() даёт false только для null и того, чего не существует.
  • empty() даёт true для этого же и ещё для любого ложного значения: false, 0, 0.0, "", "0", [].
  • is_null() для существующих переменных даёт противоположное isset(), но предупреждает, когда переменная не определена. Вместо неё используйте isset() или === null.

Проверка отправки формы

isset() это классический способ узнать, пришло ли поле формы. Запустите этот блок, введите имя и нажмите Send: тот же скрипт выполнится снова с заполненным $_POST.

Пустое текстовое поле всё равно отправляется, как "", поэтому после любой отправки isset($_POST["name"]) даёт true. Неотмеченный чекбокс не отправляется вовсе, поэтому для чекбоксов isset() ровно то, что нужно. Чтобы требовать непустое значение, проверяйте строку после trim, как в этом блоке. На странице о формах собрана полная форма с проверкой.

isset и array_key_exists

Они совпадают во всём, кроме ключа со значением null. isset() считает его отсутствующим, array_key_exists() нет.

Если в ваших данных "задано как null" значит не то же самое, что "не настроено", используйте array_key_exists(). В остальных случаях isset() короче, а поскольку это языковая конструкция, а не вызов функции, ещё и немного быстрее.

Частая ошибка: isset для выражения

isset() принимает только переменные, элементы массивов и свойства. Передача результата функции или константы вызывает ошибку компиляции:

<?php
if (isset(trim($input))) {}
PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2

Сначала сохраните результат в переменную или проверяйте само значение: null !== $expr, как предлагает сообщение, или trim($input) !== "" для строки.

Часто задаваемые вопросы

Что делает isset() в PHP?

isset($x) возвращает true, если $x существует и не равна null, и false в остальных случаях. Она никогда не выдаёт предупреждения о неопределённой переменной или ключе массива, поэтому безопасна для данных запроса вроде isset($_POST['email']).

Чем isset() отличается от empty() в PHP?

isset() спрашивает "существует ли это и не null ли оно"; empty() спрашивает "отсутствует ли это или ложно". Для 0, "", "0" и [] isset() возвращает true, и empty() тоже возвращает true. Для null или отсутствующего ключа isset() даёт false, а empty() даёт true. !empty($x) равносильно тому, что isset($x) верно и $x истинно.

Может ли isset() проверить несколько переменных?

Да: isset($a, $b, $c) возвращает true, только если каждая из них задана и не равна null. Проверка останавливается на первой незаданной.

Что использовать, isset() или array_key_exists()?

Они различаются только тогда, когда ключ существует со значением null: isset($arr['k']) возвращает false, а array_key_exists('k', $arr) возвращает true. Используйте array_key_exists, когда null это осмысленное сохранённое значение; в остальных случаях isset короче и немного быстрее.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ