Как работает isset() и empty()? В чем разница?php-3

Эти функции часто путают, хотя они принципиально разные. Давайте разберём их работу детально.

Функция isset

bool isset(mixed $var [, mixed $...])

Проверяет:

  1. Существует ли переменная
  2. Не равна ли она null

Возвращает:

  • true - если переменная определена и не null
  • false - во всех остальных случаях

Примеры:

$var = 0;
isset($var);      // true
isset($undefined); // false
isset(null);      // false

Особенности:

  • Работает с несколькими аргументами: вернет true только если все переменные определены
isset($a, $b, $c); // true только если все три существуют
  • Не вызывает предупреждения для несуществующих переменных

Функция empty

bool empty(mixed $var)

Проверяет, считается ли переменная "пустой". Возвращает true для:

  1. "" (пустая строка)
  2. 0 (0 как integer)
  3. 0.0 (0 как float)
  4. "0" (0 как string)
  5. null
  6. false
  7. [] (пустой массив)
  8. Необъявленные переменные

Примеры:

empty(0);        // true
empty("");       // true
empty(null);     // true
empty([]);       // true
empty("Hello");  // false
empty(1);        // false

Важно: empty() эквивалентна !isset($var) || $var == false

Критические различия

Значение isset() empty()
$unset false true
null false true
0 true true
"" true true
false true true
[] true true
"0" true true
1 true false
"text" true false

Когда что использовать

isset() когда нужно:

  • Проверить существование переменной/ключа массива
  • Убедиться что значение не null
  • Проверить несколько переменных одновременно

empty() когда нужно:

  • Проверить заполненность поля формы
  • Удостовериться что есть значение для обработки
  • Проверить наличие элементов в упрощённом виде

Важные предупреждения

  1. empty() - это языковая конструкция, а не функция, поэтому нельзя использовать как callback
  2. До PHP 5.5 empty() работала только с переменными, не с выражениями
empty(trim($name)); // До PHP 5.5 - ошибка

Резюмируем:

isset() проверяет существование и не-null значение, тогда как empty() определяет "пустоту" значения. Для проверки форм часто используют !empty(), так как это охватывает случаи с пустыми строками и нулями.