W3docs

empty()

La función empty() de PHP comprueba si una variable está vacía. Aprende qué valores se consideran vacíos y cuándo usarla.

Introducción

empty() es una construcción del lenguaje PHP integrada que indica si una variable está "vacía" — es decir, si no contiene ningún valor significativo. Se utiliza con mayor frecuencia para protegerse contra campos de formulario ausentes, claves de array inexistentes y variables no inicializadas antes de que el código intente usarlas.

Lo fundamental es entender que empty($var) es esencialmente una abreviatura de !isset($var) || $var == false. En otras palabras, una variable está vacía cuando no existe o su valor es uno de los valores "falsy" de PHP. Esta página explica exactamente qué valores se consideran vacíos, los errores comunes que confunden a la gente, y cuándo usar empty() en lugar de isset() o is_null().

Sintaxis

bool empty(mixed $var)

empty() recibe un único argumento, $var, y devuelve un boolean: true si la variable se considera vacía, false en caso contrario. Al ser una construcción del lenguaje y no una función regular, puede usarse directamente sobre variables que quizás no existan sin generar una advertencia.

Nota: Antes de PHP 5.5, empty() solo aceptaba una variable. El PHP moderno también permite expresiones, p. ej. empty(trim($name)).

¿Qué valores se consideran "vacíos"?

Una variable está vacía cuando no existe, o cuando su valor es alguno de los siguientes:

Valorempty() devuelve
"" (string vacío)true
"0" (string cero)true
0 (entero cero)true
0.0 (float cero)true
nulltrue
falsetrue
[] (array vacío)true
variable no definidatrue
cualquier string no vacío (p. ej. "hello")false
cualquier número distinto de cerofalse
un array no vacíofalse

Este es exactamente el conjunto de valores que PHP trata como false en un contexto boolean, más el caso en que la variable no está definida.

Ejemplo de uso

empty() no imprime nada para false/0 y 1 para true al usar echo, por lo que este ejemplo convierte el resultado a una etiqueta entera para mayor claridad.

php— editable, runs on the server

Aquí definimos seis variables de distintos tipos: $var1 es un string vacío, $var2 es un string no vacío, $var3 es null, $var4 es 0, $var5 es el string "0", y $var6 es un array vacío. empty() devuelve true para todas excepto $var2. Nótese que echo imprime 1 para true y un string vacío para false; añadimos 0-vs-1 en los comentarios para que el resultado sea legible.

Errores comunes

"0" se considera vacío

Esta es la sorpresa más frecuente. El string "0" es vacío según empty(), aunque claramente contiene un carácter. Esto importa en entradas de formulario: un usuario que escribe 0 en un campo de cantidad o edad lo verá rechazado si se valida con empty().

<?php
$age = "0";                       // a perfectly valid age from a form
var_dump(empty($age));            // bool(true)  -- oops, treated as missing
var_dump($age === "");            // bool(false) -- the field was NOT blank
?>

Si solo quieres rechazar un campo en blanco, compara con "" o usa isset() más una comprobación de longitud en lugar de empty().

empty() no advierte sobre variables o claves no definidas

A diferencia del acceso directo a una variable, empty() puede llamarse de forma segura sobre algo que quizás no exista. Devuelve true y no emite ninguna advertencia.

<?php
$config = ["timeout" => 30];

var_dump(empty($config["timeout"]));  // bool(false) -- key exists, value is 30
var_dump(empty($config["retries"]));  // bool(true)  -- key missing, no warning
var_dump(empty($undeclared));         // bool(true)  -- no "undefined variable" notice
?>

Esto hace que empty() sea ideal para comprobar claves de array opcionales, como los valores de $_POST o $_GET, sin necesidad de llamar primero a isset().

empty() vs isset() vs is_null()

Estas tres funciones se confunden fácilmente. La diferencia está en qué estados tratan como "sin valor":

Estado de la variableempty()isset()is_null()
no declaradatruefalseadvertencia + true
nulltruefalsetrue
"", 0, "0", []truetruefalse
"hello", 42falsetruefalse

En resumen:

  • Usa isset() cuando solo te interesa saber si una variable existe y no es null.
  • Usa empty() cuando quieras saber si hay algún valor utilizable (sin importarte distinguir entre 0/""/ausente).
  • Usa is_null() cuando necesites detectar específicamente null.

Una protección típica en el mundo real para un campo de formulario opcional tiene este aspecto:

<?php
$_POST = ["username" => "  "];   // simulate a submitted form with a blank-ish field

if (empty(trim($_POST["username"] ?? ""))) {
    echo "Username is required";
} else {
    echo "Welcome, " . trim($_POST["username"]);
}
?>

Salida:

Username is required

Aquí ?? "" proporciona un valor por defecto si la clave no existe, trim() elimina la entrada con solo espacios en blanco, y empty() captura tanto el caso ausente como el caso en blanco.

Conclusión

empty() es una protección conveniente para comprobar si una variable contiene un valor significativo, y es seguro usarla en variables y claves de array que pueden no existir. Su principal inconveniente es que "0", 0 y los strings vacíos se consideran vacíos, por lo que no es la herramienta adecuada cuando el cero es un valor legítimo — en esos casos usa isset() o una comparación explícita. Para inspeccionar exactamente qué contiene una variable durante la depuración, combínala con var_dump() o gettype().

Práctica

Práctica
En PHP, ¿qué características tiene la función 'empty()'?
En PHP, ¿qué características tiene la función 'empty()'?
Was this page helpful?