Какие операторы в PHP используются для проверки существования переменной?

Ответ

В PHP есть несколько ключевых операторов и функций для проверки переменных:

  • isset() — проверяет, была ли переменная объявлена и не равна ли null. Возвращает false для null и для необъявленных переменных, не вызывая при этом ошибки.
  • empty() — проверяет, является ли значение переменной "пустым". Возвращает true для false, 0, 0.0, "", "0", null, пустого массива [] и необъявленных переменных.
  • is_null() — строго проверяет, равно ли значение переменной null. Вызов на необъявленной переменной вызовет предупреждение.
  • array_key_exists() — проверяет наличие ключа в массиве, даже если его значение равно null. В отличие от isset($array['key']), которая вернет false для ключа со значением null.

Примеры и различия:

$var = null;
$arr = ['key' => null];

var_dump(isset($var));        // false (переменная равна null)
var_dump(isset($undefined));  // false (переменная не объявлена)
var_dump(empty($var));        // true
var_dump(is_null($var));      // true

var_dump(isset($arr['key']));          // false (значение null)
var_dump(array_key_exists('key', $arr)); // true (ключ существует)

Практический совет: Использую isset() для безопасной проверки наличия переменной (например, в $_GET или $_POST), empty() для проверки на "не заполнено", а array_key_exists() когда нужно отличить отсутствующий ключ от ключа со значением null.

Ответ 18+ 🔞

Э, слушай, давай разберём эту пиздопроебибну с проверками в PHP, а то тут, бля, волнение ебать, как новички путаются. Ситуация, как будто на дворе 2002-й год, и все лезут в код с кривыми условиями.

Вот смотри, есть у тебя несколько инструментов, и каждый — как ключ от определённого замка. Если начать is_null() тыкать куда попало, будет тебе хиросима и нигерсраки в логах.

isset() — это наш основной кореш. Он проверяет, объявлена ли переменная вообще и не равна ли она null. Самое классное — если переменной нет, он не орёт ошибкой, а просто молча возвращает false. Идеально для проверки, пришло ли что-то из формы или из $_GET. Типа страховка от "хуй с горы".

empty() — это уже построже. Он возвращает true не только для null или необъявленной хуйни, но и для всего, что считается "пустым": false, ноль, пустая строка, строка "0" (да, вот этот подвох, ядрёна вошь!), и пустой массив. По сути, он отвечает на вопрос "а есть ли тут хоть что-то полезное?".

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

array_key_exists() — а вот это хитрая жопа для работы с массивами. isset($arr['key']) спасёт, если ключа нет, но она же свалит в false, если ключ есть, а значение — null. А array_key_exists() честно скажет: "Да, ключ существует, просто в нём хуй в пальто лежит". Разница тонкая, но важная.

Вот, смотри на примерах, чтобы в голове уложилось:

$var = null;
$arr = ['key' => null];

var_dump(isset($var));        // false (потому что null)
var_dump(isset($undefined));  // false (переменной нет, но ошибки нет — красота!)
var_dump(empty($var));        // true (потому что null — это пустота)
var_dump(is_null($var));      // true (строго проверяем на null)

var_dump(isset($arr['key']));          // false (ключ есть, но значение null)
var_dump(array_key_exists('key', $arr)); // true (а вот так мы узнаем, что ключ-то есть!)

Итог, блядь, простой:
Для безопасности входящих данных — isset() твой бро.
Чтобы проверить "а не пустое ли тут всё?" — empty().
Нужно докопаться строго до null в известной переменной — is_null().
А ковыряешься в массивах и нужно отличить отсутствующий ключ от null — твой выбор array_key_exists().
Выбери не тот инструмент — и прощай, логическая целостность, доверия ебать ноль.