W3docs

empty

Aprende cómo empty() de PHP comprueba si una variable está vacía o no definida, qué valores se consideran vacíos (incluido el "0") y cómo difiere de isset().

La construcción de lenguaje empty() de PHP

empty() es una construcción de lenguaje PHP que indica si una variable está vacía — es decir, si no existe o contiene un valor que PHP considera "falsy" (como "", 0 o null). Como nunca emite una advertencia para variables no definidas, es la herramienta preferida para comprobar entradas opcionales como campos de formulario, parámetros de consulta y valores de configuración.

Esta página cubre la sintaxis, la lista exacta de valores tratados como vacíos, los errores comunes y cómo empty() difiere de las construcciones relacionadas isset() e is_null().

En sentido estricto, empty() es una construcción de lenguaje, no una función, aunque se escribe con paréntesis. Esa distinción tiene una consecuencia práctica — consulta Solo funciona con variables más abajo.

Sintaxis

<?php

if (empty($variable)) {
  // $variable is empty (or does not exist)
}

empty($variable) devuelve true cuando la variable está vacía y false en caso contrario. Es lógicamente equivalente a !isset($variable) || $variable == false.

Qué se considera vacío

Una variable está vacía cuando no existe o contiene alguno de estos valores:

ValorPor qué está vacío
variable no definida / no asignadala variable nunca fue asignada
nullel tipo "sin valor"
falseel boolean false
0 (int) y 0.0 (float)cero numérico
"0" (string)el string que contiene un solo cero — una sorpresa clásica
"" (string vacío)un string sin caracteres
[] (array vacío)un array sin elementos

Todo lo demás — incluyendo "0.0", " " (un espacio), "false" y el array [0]no está vacío.

La regla del "0" es la que confunde a la gente. Un número de casa, un código postal o un término de búsqueda con valor "0" se informará como vacío. Si un cero literal es un valor válido, comprueba la longitud o compara explícitamente en lugar de usar empty().

Ejemplos

<?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

Un caso de uso práctico: validar entradas de formulario

empty() destaca al proteger contra datos de solicitud ausentes o en blanco, porque comprueba "no definido" y "vacío" en una sola expresión:

<?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!"

El problema del "0" en acción

<?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

Observa que "0" se reporta como vacío, pero "0.0" y un espacio simple no lo son.

Solo funciona con variables

Dado que empty() es una construcción de lenguaje, solo se puede usar con variables — pasar el resultado de una expresión o una llamada a función es un error de sintaxis antes de PHP 5.5 y una trampa lógica que conviene evitar en general:

<?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()

Estas tres construcciones son fáciles de confundir. La tabla muestra lo que devuelve cada una para las mismas entradas:

Entradaempty()isset()is_null()
variable no definidatruefalseadvertencia + true
nulltruefalsetrue
""truetruefalse
0 / "0"truetruefalse
falsetruetruefalse
[]truetruefalse
"hello"falsetruefalse

Reglas prácticas:

  • Usa isset() para preguntar "¿existe esta variable y no es null?" — ideal para claves de array y propiedades de object.
  • Usa is_null() para preguntar "¿es este valor exactamente null?" y nada más.
  • Usa empty() para preguntar "¿falta esto o está en blanco?" — la comprobación más amplia y permisiva.

Conclusión

empty() te ofrece una forma única y sin advertencias de comprobar si una variable no existe o contiene un valor falsy, lo que la convierte en una opción natural para validar entradas opcionales. Ten en cuenta la regla del "0", recuerda que solo acepta variables, y recurre a isset() o is_null() cuando necesites una comprobación más precisa. Para más información sobre los valores con los que operan estas comprobaciones, consulta PHP Data Types y PHP Variables.

Práctica

Práctica
¿Qué hace empty() en PHP?
¿Qué hace empty() en PHP?
Was this page helpful?