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:
| Valor | Por qué está vacío |
|---|---|
| variable no definida / no asignada | la variable nunca fue asignada |
null | el tipo "sin valor" |
false | el 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 usarempty().
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 emptyUn 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 emptyObserva 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:
| Entrada | empty() | isset() | is_null() |
|---|---|---|---|
| variable no definida | true | false | advertencia + true |
null | true | false | true |
"" | true | true | false |
0 / "0" | true | true | false |
false | true | true | false |
[] | true | true | false |
"hello" | false | true | false |
Reglas prácticas:
- Usa
isset()para preguntar "¿existe esta variable y no esnull?" — ideal para claves de array y propiedades de object. - Usa
is_null()para preguntar "¿es este valor exactamentenull?" 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.