Empty: примеры (PHP)

Использование empty() для проверки переменных в PHP
Раздел: Работа с переменными
empty(mixed $var): bool
Функция empty в PHP

Функция empty() в PHP проверяет, является ли переменная пустой. Проверка выполняется без генерации предупреждений, если переменная не определена. Это полезно для проверки существования и содержимого переменных, полученных из внешних источников, например, из форм.

Функция принимает один аргумент любого типа. Возвращает true, если переменная считается пустой, и false в противном случае. Переменная считается пустой, если она не существует или её значение равно false. Конкретные случаи, когда empty() возвращает true:

  • Переменная не определена ($var;).
  • Значение null.
  • Логическое значение false.
  • Целое число 0 или строка '0'.
  • Пустая строка ('' или "").
  • Пустой массив ([]).
  • Объект без объявленных свойств (в PHP до версии 5.0). С версии 5.0 empty() всегда возвращает false для объектов.
Короткие примеры функции empty

Примеры использования с различными типами данных и результатами:

Проверка строк
$var1 = '';
echo 'empty(\'\'): ' . (empty($var1) ? 'true' : 'false') . '\n';

$var2 = '0';
echo 'empty(\'0\'): ' . (empty($var2) ? 'true' : 'false') . '\n';

$var3 = 'текст';
echo 'empty(\'текст\'): ' . (empty($var3) ? 'true' : 'false') . '\n';
empty(''): true
empty('0'): true
empty('текст'): false
Проверка чисел
$num1 = 0;
echo 'empty(0): ' . (empty($num1) ? 'true' : 'false') . '\n';

$num2 = 1;
echo 'empty(1): ' . (empty($num2) ? 'true' : 'false') . '\n';
empty(0): true
empty(1): false
Проверка массивов и объектов
$arr1 = [];
echo 'empty([]): ' . (empty($arr1) ? 'true' : 'false') . '\n';

$arr2 = ['a'];
echo 'empty([\'a\']): ' . (empty($arr2) ? 'true' : 'false') . '\n';

$obj = new stdClass();
echo 'empty(new stdClass()): ' . (empty($obj) ? 'true' : 'false') . '\n';
empty([]): true
empty(['a']): false
empty(new stdClass()): false
Похожие функции в PHP

В PHP существуют другие функции для проверки переменных, каждая со своей спецификой.

Проверяет, определена ли переменная и не равна ли null. Возвращает true для определенных переменных со значением, отличным от null, включая false, 0, пустые строки. Для проверки существования ключа в массиве или свойства объекта.

Проверяет, является ли значение переменной равным null. Вызывает предупреждение, если переменная не определена. Используется для строгой проверки на null.

Проверка через сравнение

Операторы сравнения (==, ===, !=, !==) позволяют выполнить более точные проверки. Например, $var === '' проверяет строго пустую строку, а $var == false работает аналогично empty(), но для определенной переменной.

Когда что использовать: empty() удобна для быстрой проверки наличия значения в данных форм. isset() применяют, чтобы убедиться в существовании переменной или ключа. is_null() используют для точной проверки на null. Сравнения подходят для сложных условий.

Типичные ошибки использования
Проверка несуществующих свойств объектов

При прямом обращении к несуществующему свойству объекта empty() вернет true, но если включены предупреждения, может сгенерироваться ошибка уровня E_WARNING. Рекомендуется использовать isset() для свойств объектов или property_exists().

// Пример с ошибкой, если свойство не объявлено
$obj = new stdClass();
// echo empty($obj->property); // Может вызвать предупреждение
// Правильный способ
echo 'isset: ' . (isset($obj->property) ? 'true' : 'false');
isset: false
Использование с выражениями

Функция empty() принимает только переменные. Передача выражения или результата функции вызовет ошибку парсинга в PHP версий до 5.5. С PHP 5.5 можно передавать выражения.

// До PHP 5.5 это вызовет ошибку
// $result = empty(trim($var));
// Правильно
$trimmed = trim($var);
$result = empty($trimmed);
Путаница с целым 0 и строкой '0'

Поскольку и 0, и '0' считаются пустыми, это может привести к неожиданному поведению при проверке числовых идентификаторов, где 0 допустимое значение. В таких случаях лучше использовать строгое сравнение.

$id = 0;
if (empty($id)) {
    echo 'ID пустой';
} else {
    echo 'ID: ' . $id;
}
// Более точная проверка
if ($id === null || $id === '') {
    echo 'ID действительно отсутствует';
}
ID пустой
Изменения в последних версиях PHP

В PHP 5.5 разрешено использование выражений в качестве аргумента функции empty(). Ранее функция принимала только переменные.

В PHP 8.0 поведение функции empty() не изменилось кардинально. Однако общие изменения в языке, такие как строгий режим типов, могут влиять на контекст использования. Также в PHP 8 улучшены сообщения об ошибках для неопределенных переменных.

Отличительная особенность PHP 8 - более последовательное приведение типов, что делает поведение empty() более предсказуемым в сложных выражениях.

Расширенные примеры применения
Проверка нескольких полей формы
Пример php
// Эмуляция данных POST-запроса
$_POST = ['name' => '', 'age' => '0', 'email' => 'user@example.com'];

$errors = [];
if (empty($_POST['name'])) {
    $errors[] = 'Имя обязательно для заполнения';
}
if (empty($_POST['age'])) {
    $errors[] = 'Возраст должен быть указан';
}
if (empty($_POST['email'])) {
    $errors[] = 'Email обязателен';
} else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'Некорректный email';
}

print_r($errors);
Array
(
    [0] => Имя обязательно для заполнения
    [1] => Возраст должен быть указан
)
Использование в тернарном операторе
Пример php
$config = [];
$debugMode = !empty($config['debug']) ? $config['debug'] : false;
echo 'Режим отладки: ' . ($debugMode ? 'включен' : 'выключен');

// Сокращенная запись с оператором объединения (PHP 7+)
$debugMode = $config['debug'] ?? false;
echo '\nРежим отладки через ??: ' . ($debugMode ? 'включен' : 'выключен');
Режим отладки: выключен
Режим отладки через ??: выключен
Проверка вложенных массивов
Пример php
$data = [
    'user' => [
        'profile' => [
            'name' => '',
            'age' => 25
        ]
    ]
];

// Безопасная проверка вложенных элементов
if (!empty($data['user']['profile']['name'])) {
    echo 'Имя: ' . $data['user']['profile']['name'];
} else {
    echo 'Имя не указано';
}

// Проверка с использованием null-объединяющего оператора (PHP 7+)
$name = $data['user']['profile']['name'] ?? 'неизвестно';
echo '\nИмя через ??: ' . $name;
Имя не указано
Имя через ??: неизвестно
empty() с магическими методами __isset() и __get()
Пример php
class MagicClass {
    private $data = [];
    
    public function __isset($name) {
        return isset($this->data[$name]);
    }
    
    public function __get($name) {
        return $this->data[$name] ?? null;
    }
    
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}

$obj = new MagicClass();
$obj->property = '';

echo 'empty() для магического свойства: ' . (empty($obj->property) ? 'true' : 'false') . '\n';
echo 'isset() для магического свойства: ' . (isset($obj->property) ? 'true' : 'false');
empty() для магического свойства: true
isset() для магического свойства: true
Аналоги функции в других языках

Empty в Python

В Python нет прямой аналогии. Для проверки используют преобразование в логический контекст или функцию bool(). Пустыми считаются None, False, 0, пустые коллекции.

values = ['', '0', 0, None, [], 'текст']
for val in values:
    print(f'bool({repr(val)}): {bool(val)}')
bool(''): False
bool('0'): True
bool(0): False
bool(None): False
bool([]): False
bool('текст'): True

Empty в Javascript

В JavaScript логический контекст при проверке похож, но есть оператор == с особым поведением. Часто используют !value или Boolean(value). Значения false, 0, пустая строка, null, undefined, NaN считаются "ложными".

console.log(Boolean(''));      // false
console.log(Boolean('0'));     // true
console.log(Boolean(0));       // false
console.log(Boolean(null));    // false
console.log(Boolean([]));      // true
console.log(Boolean('текст')); // true

Empty в MySQL

В SQL для проверки на пустоту используют условия IS NULL для NULL значений и сравнение с пустой строкой. Функция COALESCE() возвращает первое не-NULL значение.

-- Проверка на NULL и пустую строку
SELECT
    column IS NULL OR column = '' AS is_empty
FROM table;

PHP empty function comments

En
Empty Determine whether a variable is empty