Детальное руководство по empty() в PHP с примерами

Раздел: Типы данных PHP -> Проверка переменных

Функция empty() в PHP: всё, что нужно знать

Функция empty() проверяет, является ли переменная пустой. Пустыми считаются: null, false, пустая строка '', ноль 0, строка '0', пустой массив [], а также необъявленная переменная (без вывода предупреждения). Функция возвращает true для пустых значений и false - для непустых.

Самый надёжный и краткий способ проверки на пустоту - использование встроенной функции empty().

$var = 0;
if (empty($var)) {
    echo "Переменная пуста";
} else {
    echo "Переменная не пуста";
}
Переменная пуста

Функция не вызывает ошибки, если переменная не определена. Это удобно для проверки данных из форм, где поле может отсутствовать.

Цель использования:

  • Быстрая проверка на заполненность поля ввода.
  • Защита от ошибок при работе с неопределёнными переменными.

Как проверить, что переменная существует и не равна null, не используя empty?

Вариант: функция isset()

$var = 0;
if (isset($var)) {
    echo "Переменная существует (не null)";
} else {
    echo "Переменная не определена или равна null";
}
Переменная существует (не null)

Проблема: isset() считает 0, '', false существующими, хотя empty() считает их пустыми. Частая ошибка - путаница при проверке обязательных полей формы.

Решение: использовать empty(), если нужно отсекать нулевые и пустые значения, или комбинировать isset() с дополнительной проверкой на '' === $var и т.д.

Как проверить, что переменная равна null?

Вариант: функция is_null()

$var = null;
if (is_null($var)) {
    echo "Переменная равна null";
} else {
    echo "Переменная не равна null";
}
Переменная равна null

Проблема: is_null() не подходит для проверки на пустоту в общем смысле, так как не считает пустыми 0 или ''. Ошибка: полагаться только на is_null() для проверки полей формы.

Решение: комбинировать с empty() или использовать '' === $var для явного сравнения.

Как проверить, что строка пуста или содержит только пробелы?

Вариант: функция trim() и сравнение с пустой строкой

$str = "   ";
if (empty(trim($str))) {
    echo "Строка пуста или состоит из пробелов";
}
Строка пуста или состоит из пробелов

Проблема: empty() без trim() считает строку с пробелами непустой. Ошибка: не учитывают пробелы как "пустой" ввод.

Решение: перед empty() применить trim() или использовать своё условие.

Как проверить, что массив пуст?

Вариант: функция count() или оператор === []

$arr = [];
if (count($arr) === 0) {
    echo "Массив пуст";
}
// или
if ($arr === []) {
    echo "Массив пуст";
}
Массив пуст
Массив пуст

Проблема: empty() тоже работает с массивами, но может дать неверный результат для объекта, реализующего Countable. Ошибка: использование empty() для объекта с count > 0, если объект не определён как пустой.

Решение: для массивов подходит empty(); для сложных объектов лучше использовать count() или пользовательские проверки.

Расширенные примеры использования empty() и альтернативы

Пример 1: Проверка объекта с реализацией __isset() и __get().

Пример
class User {
    private $data = ['name' => ''];

    public function __isset($key) {
        return isset($this->data[$key]);
    }

    public function __get($key) {
        return $this->data[$key] ?? null;
    }
}

$user = new User();
var_dump(empty($user->name)); // bool(true) - потому что пустая строка
var_dump(empty($user->age));  // bool(true) - неопределённое свойство
bool(true)
bool(true)

Пример 2: Использование empty() с функцией array_filter() для удаления пустых элементов.

Пример
$input = ['apple', '', 'banana', 0, false, null, 'cherry'];
$filtered = array_filter($input, function($value) {
    return !empty($value);
});
print_r($filtered);
Array
(
    [0] => apple
    [2] => banana
    [6] => cherry
)

Пример 3: Проверка вложенных массивов с помощью empty() и null coalescing.

Пример
$data = ['user' => ['name' => 'Alice', 'age' => 0]];
// Проверка, есть ли возраст (даже если 0)
if (!empty($data['user']['age'] ?? null)) {
    echo "Возраст указан";
} else {
    echo "Возраст пуст или не указан";
}
// Вывод: Возраст пуст или не указан (так как 0 считается пустым)
Возраст пуст или не указан

Пример 4: Использование empty() для проверки результата функции.

Пример
function getUser() {
    return null; // или false, или массив
}
$user = getUser();
if (empty($user)) {
    echo "Пользователь не найден или пустые данные";
} else {
    echo "Пользователь найден";
}
Пользователь не найден или пустые данные

Пример 5: Проверка строки на число 0 с помощью empty() и строгого сравнения.

Пример
$value = '0';
if (empty($value)) {
    echo "empty считает '0' пустым";
}
// Альтернатива с сохранением 0
if ($value === '0' || $value === 0) {
    echo "Значение равно 0, но не пусто в контексте числа";
}
empty считает '0' пустым
Значение равно 0, но не пусто в контексте числа

Пример 6: Проверка объекта, реализующего Countable, с помощью count() для более точного контроля.

Пример
class Items implements Countable {
    private $items = [];
    public function add($item) {
        $this->items[] = $item;
    }
    public function count(): int {
        return count($this->items);
    }
}
$bag = new Items();
$bag->add('book');
echo count($bag); // 1
echo empty($bag) ? 'пуст' : 'не пуст'; // не пуст - объект не считается пустым, несмотря на count()? 
// В PHP 8 объект без __isset не попадает под empty, поэтому вернёт false
1
не пуст

функция empty в PHP - comments

En
Empty php (php)