📚
#22 18.09.2025 PHP Basics
isset(mixed $var, mixed ...$vars): bool

Расскажите об этой языковой конструкции всё, что знаете.

isset() — это безопасный способ проверить существование переменной, ключа массива или свойства объекта без генерации предупреждений. Она возвращает false только в двух случаях: если переменная не существует или если её значение равно null. Не путайте с empty() (проверяет на “falsey”) и is_null() (проверяет строго на null).

Подробнее
⚠️
Внимание! Этот текст был сгенерирован AI-ассистентом. Информация может содержать неточности и требует проверки.

Полный ответ:

1. Основное назначение и синтаксис

isset() — это встроенная языковая конструкция, которая проверяет, инициализирована ли переменная и не равна ли она null.

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

Она может принимать несколько аргументов и возвращает true, только если все переданные переменные существуют и не равны null.

$var = 'test';
var_dump(isset($var)); // bool(true)

var_dump(isset($undefinedVar)); // bool(false) - переменной не существует

$nullVar = null;
var_dump(isset($nullVar)); // bool(false) - переменная существует, но равна null

2. Ключевые особенности

  1. Подавление предупреждений: isset() не генерирует предупреждение (E_NOTICE или E_WARNING) если переменная не определена. Это её основное преимущество перед прямой проверкой.
    • Плохо: if ($undefinedVar) {...} // Notice: Undefined variable
    • Хорошо: if (isset($undefinedVar)) {...} // Никаких предупреждений
  2. Поведение с несколькими аргументами: Возвращает true только если все переменные установлены.
    $a = 1;
    $b = null;
    $c = 3;
    
    var_dump(isset($a, $c)); // true (обе установлены)
    var_dump(isset($a, $b, $c)); // false ($b - null)
    
  3. Поведение с элементами массивов: Чаще всего используется для проверки существования ключа в массиве (особенно в $_GET, $_POST, $_SESSION).
    // Проверка одноуровнего ключа
    if (isset($_GET['search'])) {
        $searchTerm = $_GET['search'];
    }
    
    // Проверка вложенных ключей (лучший способ)
    if (isset($_SESSION['user']['profile']['email'])) {
        $email = $_SESSION['user']['profile']['email'];
    }
    
  4. Поведение со свойствами объектов: Проверяет, существует ли свойство у объекта и не равно ли оно null.
    class User {
        public $name;
        private $age = 18;
            
        public function __construct() {
        	var_dump(isset($this->age));  // true 
        }
    }
    
    $user = new User();
    $user->name = 'John';
    
    var_dump(isset($user->name)); // true
    var_dump(isset($user->age));  // false (нет доступа в этой области видимости)
    var_dump(isset($user->undefinedProp)); // false (не существует)
    

    Важно: isset() может проверять только доступные свойства (public или private/protected из соответствующей области видимости).

3. Что возвращает isset() для разных значений?

isset() возвращает true для переменных, которые существуют и чье значение не является null. Это включает в себя:

  • Ложные значения: false, 0, '' (пустая строка), [] (пустой массив)
  • Ресурсы, объекты, любые не-null значения
$false = false;
$zero = 0;
$emptyStr = '';

var_dump(isset($false));    // true
var_dump(isset($zero));     // true
var_dump(isset($emptyStr)); // true

4. Отличие от других функций и конструкций

Конструкция Проверяет Возвращает для $var = null; Для необъявленной $var
isset($var) Существует и не null false false (без предупреждения)
empty($var) “Falsey”-значение true true (без предупреждения)
is_null($var) Является ли null true true (с предупреждением)
$var === null Является ли null true true (с предупреждением)

empty() эквивалентна !isset($var) || $var == false.

5. Распространенные ошибки и лучшие практики

  1. Проверка вложенных структур: Для глубокой проверки вложенных массивов используйте isset() на каждом уровне.
    // Правильно и безопасно
    if (isset($data['user']) && isset($data['user']['address'])) {
        // ...
    }
    
    // С PHP 7 можно использовать так (но это менее читаемо)
    if (isset($data['user']['address'])) {
        // ...
    }
    
  2. Не использовать для проверки на null: Если вам нужно точно знать, равна ли переменная null, используйте is_null() или строгое сравнение $var === null.

  3. Использование с unset(): isset() возвращает false после того, как переменная была уничтожена с помощью unset().
    $var = 'test';
    unset($var);
    var_dump(isset($var)); // false
    

Итог:

isset() — это безопасный способ проверить существование переменной, ключа массива или свойства объекта без генерации предупреждений. Она возвращает false только в двух случаях: если переменная не существует или если её значение равно null. Не путайте с empty() (проверяет на “falsey”) и is_null() (проверяет строго на null).