Empty: примеры (PHP)
empty(mixed $var): boolФункция empty() в PHP проверяет, является ли переменная пустой. Проверка выполняется без генерации предупреждений, если переменная не определена. Это полезно для проверки существования и содержимого переменных, полученных из внешних источников, например, из форм.
Функция принимает один аргумент любого типа. Возвращает true, если переменная считается пустой, и false в противном случае. Переменная считается пустой, если она не существует или её значение равно false. Конкретные случаи, когда empty() возвращает true:
- Переменная не определена (
$var;). - Значение
null. - Логическое значение
false. - Целое число 0 или строка '0'.
- Пустая строка ('' или "").
- Пустой массив ([]).
- Объект без объявленных свойств (в PHP до версии 5.0). С версии 5.0
empty()всегда возвращаетfalseдля объектов.
Примеры использования с различными типами данных и результатами:
$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 существуют другие функции для проверки переменных, каждая со своей спецификой.
Проверяет, определена ли переменная и не равна ли 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 допустимое значение. В таких случаях лучше использовать строгое сравнение.
$id = 0;
if (empty($id)) {
echo 'ID пустой';
} else {
echo 'ID: ' . $id;
}
// Более точная проверка
if ($id === null || $id === '') {
echo 'ID действительно отсутствует';
}ID пустой
В PHP 5.5 разрешено использование выражений в качестве аргумента функции empty(). Ранее функция принимала только переменные.
В PHP 8.0 поведение функции empty() не изменилось кардинально. Однако общие изменения в языке, такие как строгий режим типов, могут влиять на контекст использования. Также в PHP 8 улучшены сообщения об ошибках для неопределенных переменных.
Отличительная особенность PHP 8 - более последовательное приведение типов, что делает поведение empty() более предсказуемым в сложных выражениях.
// Эмуляция данных 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] => Возраст должен быть указан
)$config = [];
$debugMode = !empty($config['debug']) ? $config['debug'] : false;
echo 'Режим отладки: ' . ($debugMode ? 'включен' : 'выключен');
// Сокращенная запись с оператором объединения (PHP 7+)
$debugMode = $config['debug'] ?? false;
echo '\nРежим отладки через ??: ' . ($debugMode ? 'включен' : 'выключен');Режим отладки: выключен Режим отладки через ??: выключен
$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;Имя не указано Имя через ??: неизвестно
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('текст'): TrueEmpty в 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('текст')); // trueEmpty в MySQL
В SQL для проверки на пустоту используют условия IS NULL для NULL значений и сравнение с пустой строкой. Функция COALESCE() возвращает первое не-NULL значение.
-- Проверка на NULL и пустую строку
SELECT
column IS NULL OR column = '' AS is_empty
FROM table;