Menu

PHP isset(): comprobar si existe una variable o una clave

isset($var) devuelve true cuando una variable existe y no es null, y false en caso contrario, sin ningún warning. También comprueba claves de array y propiedades de objetos: isset($user['email']). Aprende isset con varias variables, claves anidadas, isset frente a empty, isset frente a array_key_exists y cómo comprobar el envío de formularios.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

isset($var) devuelve true si la variable existe y su valor no es null. Devuelve false para una variable no definida, una eliminada con unset o una que contiene null, y nunca imprime un warning.

isset() solo mira si algo está ahí. Un valor definido pero vacío, como 0, "" o [], sigue devolviendo true. Si quieres "definido y no vacío", usa empty (negado).

Comprobar si existe una clave de array con isset

Aquí es donde más se usa isset(). Leer una clave que no existe imprime Warning: Undefined array key en una instalación normal de PHP; comprobarla antes con isset(), no. También funciona con claves anidadas, y se detiene sin ruido en el primer nivel que falta.

Cuando solo necesitas el valor o uno por defecto, $user["website"] ?? "none" hace la misma comprobación en un paso. Consulta el operador de fusión de null.

isset con varias variables

Pasa varios argumentos e isset() devuelve true solo si todos están definidos y no son null. Es una forma corta de comprobar que llegaron todos los campos obligatorios.

isset con cadenas y objetos

En una cadena, isset($str[5]) comprueba si hay un carácter en la posición 5, lo que sirve como comprobación rápida de longitud. En un objeto, comprueba una propiedad; en una clase con datos privados, isset() llama al método __isset() si la clase lo define.

isset vs empty vs is_null

Elige un valor de $x en la tabla para comparar las tres comprobaciones y el cast (bool). Cada celda la calculó PHP 8.3.

isset, empty e is_null para cada valor de $x
Point at or tap a cell to read it as PHP.
$xissetemptyis_nullbool
null
false
0
"0"
""
" "
[]
"a"
1
0.0
"0.0"
Every cell computed by PHP 8.3.19.

El patrón que hay que recordar:

  • isset() es false solo para null y para lo que no existe.
  • empty() es true para eso y además para cualquier valor falsy: false, 0, 0.0, "", "0", [].
  • is_null() da lo contrario de isset() con variables que existen, pero avisa cuando la variable no está definida. Usa isset() o === null en su lugar.

Comprobar si se envió un formulario

isset() es la forma clásica de ver si llegó un campo de formulario. Ejecuta este bloque, escribe un nombre y pulsa Send: el mismo script se ejecuta otra vez con $_POST lleno.

Un campo de texto vacío se envía igualmente, como "", así que isset($_POST["name"]) es true tras cualquier envío. Una casilla sin marcar no se envía en absoluto, lo que hace de isset() justo la prueba adecuada para las casillas. Para exigir un valor no vacío, comprueba la cadena recortada como hace el bloque. La página de formularios construye un formulario completo con validación.

isset vs array_key_exists

Las dos coinciden en todo salvo en una clave cuyo valor es null. isset() la trata como si faltara; array_key_exists(), no.

Si en tus datos "puesto a null" significa algo distinto de "sin configurar", usa array_key_exists(). Si no, isset() es más corto, y como es una construcción del lenguaje y no una llamada a función, también es algo más rápido.

Error frecuente: isset con una expresión

isset() solo acepta variables, elementos de array y propiedades. Pasarle el resultado de una función o una constante es un error de compilación:

<?php
if (isset(trim($input))) {}
PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2

Guarda antes el resultado en una variable, o comprueba el propio valor: null !== $expr, como sugiere el mensaje, o trim($input) !== "" para una cadena.

Preguntas frecuentes

¿Qué hace isset() en PHP?

isset($x) devuelve true si $x existe y no es null, y false en caso contrario. Nunca genera un warning por una variable o una clave de array no definidas, así que es segura con los datos de la petición, como isset($_POST['email']).

¿Cuál es la diferencia entre isset() y empty() en PHP?

isset() pregunta "¿existe y no es null?"; empty() pregunta "¿falta o es falsy?". Con 0, "", "0" y [], isset() devuelve true y empty() también devuelve true. Con null o una clave que falta, isset() es false y empty() es true. !empty($x) equivale a que isset($x) && $x sea truthy.

¿Puede isset() comprobar varias variables?

Sí: isset($a, $b, $c) devuelve true solo si todas están definidas y no son null. Se detiene en la primera que no lo esté.

¿Uso isset() o array_key_exists()?

Solo se diferencian cuando la clave existe con el valor null: isset($arr['k']) devuelve false y array_key_exists('k', $arr) devuelve true. Usa array_key_exists cuando null sea un valor guardado con significado; si no, isset es más corto y algo más rápido.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR