W3docs

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()
неопределённая переменнаяtruefalseпредупреждение + true
nulltruefalsetrue
""truetruefalse
0 / "0"truetruefalse
falsetruetruefalse
[]truetruefalse
"hello"falsetruefalse

Практические рекомендации:

  • Используйте isset(), чтобы спросить «существует ли эта переменная и не равна ли она null?» — идеально для ключей array и свойств object.
  • Используйте is_null(), чтобы спросить «равно ли это значение именно null?» и ничего больше.
  • Используйте empty(), чтобы спросить «отсутствует ли это значение или является ли оно пустым?» — наиболее широкая и мягкая проверка.

Заключение

empty() предоставляет единый способ без предупреждений проверить, отсутствует ли переменная или содержит ли она ложное значение, что делает её естественным инструментом для валидации необязательных входных данных. Помните о правиле с "0", учитывайте, что конструкция принимает только переменные, и обращайтесь к isset() или is_null(), когда нужна более точная проверка. Подробнее о значениях, с которыми работают эти конструкции, читайте в разделах Типы данных PHP и Переменные PHP.

Практика

Практика
Что делает empty() в PHP?
Что делает empty() в PHP?
Was this page helpful?