empty
Узнайте, как PHP empty() проверяет переменную на пустоту или отсутствие, какие значения считаются пустыми (включая «0»), и чем это отличается от isset().
Языковая конструкция PHP empty()
empty() — это языковая конструкция PHP, которая сообщает, является ли переменная пустой, то есть либо не существует, либо содержит значение, которое PHP считает «ложным» (например, "", 0 или null). Поскольку она никогда не генерирует предупреждение для неопределённых переменных, это основной инструмент для проверки необязательных входных данных: полей форм, параметров запроса и значений конфигурации.
На этой странице рассматриваются синтаксис, точный список значений, считающихся пустыми, распространённые ловушки и отличия empty() от связанных конструкций isset() и is_null().
Строго говоря,
empty()является языковой конструкцией, а не функцией, хотя и записывается со скобками. Это различие имеет одно практическое следствие — смотрите раздел Работает только с переменными ниже.
Синтаксис
<?php
if (empty($variable)) {
// $variable is empty (or does not exist)
}empty($variable) возвращает true, если переменная пуста, и false в противном случае. Это логически эквивалентно выражению !isset($variable) || $variable == false.
Что считается пустым
Переменная считается пустой, если она не существует или содержит одно из следующих значений:
| Значение | Почему оно пустое |
|---|---|
| неустановленная / неопределённая переменная | переменной никогда не присваивалось значение |
null | тип «отсутствия значения» |
false | булево значение false |
0 (int) и 0.0 (float) | числовой ноль |
"0" (string) | строка, содержащая один ноль — классическая ловушка |
"" (пустая строка) | строка без символов |
[] (пустой array) | array без элементов |
Всё остальное — включая "0.0", " " (пробел), "false" и array [0] — не является пустым.
Правило с
"0"чаще всего вызывает затруднения. Номер дома, почтовый индекс или поисковый запрос"0"будут определены как пустые. Если буквальный ноль является допустимым значением, проверяйте длину или сравнивайте явно, вместо использованияempty().
Примеры
<?php
// Example 1 — empty string
$myVariable = "";
if (empty($myVariable)) {
echo "Variable is empty" . PHP_EOL;
} else {
echo "Variable is not empty" . PHP_EOL;
}
// Example 2 — empty array
$myArray = [];
if (empty($myArray)) {
echo "Array is empty" . PHP_EOL;
} else {
echo "Array is not empty" . PHP_EOL;
}
// Output:
// Variable is empty
// Array is emptyПрактический пример: валидация данных формы
empty() незаменима при защите от отсутствующих или пустых данных запроса, поскольку проверяет «не установлено» и «пусто» в одном выражении:
<?php
$username = $_POST['username'] ?? null;
if (empty($username)) {
echo "Please enter a username." . PHP_EOL;
} else {
echo "Welcome, $username!" . PHP_EOL;
}
// With $_POST['username'] missing or "" → "Please enter a username."
// With $_POST['username'] = "Sam" → "Welcome, Sam!"Ловушка с "0" на практике
<?php
$values = ["", "0", "0.0", "hello", " "];
foreach ($values as $value) {
$state = empty($value) ? "empty" : "not empty";
echo "'$value' is $state" . PHP_EOL;
}
// Output:
// '' is empty
// '0' is empty
// '0.0' is not empty
// 'hello' is not empty
// ' ' is not emptyОбратите внимание, что "0" определяется как пустое, а "0.0" и одиночный пробел — нет.
Работает только с переменными
Поскольку empty() является языковой конструкцией, её можно использовать только с переменными — передача результата выражения или вызова функции является синтаксической ошибкой до PHP 5.5 и логической ловушкой, которой следует избегать в целом:
<?php
// Valid — argument is a variable:
$name = trim(" ");
if (empty($name)) {
echo "Name is blank";
}
// Avoid — empty(trim($name)) reads awkwardly; assign first, as above.empty() vs isset() vs is_null()
Эти три конструкции легко перепутать. В таблице показано, что каждая из них возвращает для одинаковых входных данных:
| Входное значение | empty() | isset() | is_null() |
|---|---|---|---|
| неопределённая переменная | true | false | предупреждение + true |
null | true | false | true |
"" | true | true | false |
0 / "0" | true | true | false |
false | true | true | false |
[] | true | true | false |
"hello" | false | true | false |
Практические рекомендации:
- Используйте
isset(), чтобы спросить «существует ли эта переменная и не равна ли онаnull?» — идеально для ключей array и свойств object. - Используйте
is_null(), чтобы спросить «равно ли это значение именноnull?» и ничего больше. - Используйте
empty(), чтобы спросить «отсутствует ли это значение или является ли оно пустым?» — наиболее широкая и мягкая проверка.
Заключение
empty() предоставляет единый способ без предупреждений проверить, отсутствует ли переменная или содержит ли она ложное значение, что делает её естественным инструментом для валидации необязательных входных данных. Помните о правиле с "0", учитывайте, что конструкция принимает только переменные, и обращайтесь к isset() или is_null(), когда нужна более точная проверка. Подробнее о значениях, с которыми работают эти конструкции, читайте в разделах Типы данных PHP и Переменные PHP.