W3docs

isset()

La función isset() de PHP comprueba si una variable está definida y no es null. Devuelve true si existe y no es null, false en caso contrario.

Introducción

El constructo isset() es un constructo de lenguaje integrado en PHP que comprueba si una variable ha sido definida. Devuelve true si la variable existe y no es null, y false en caso contrario.

Lo fundamental que hay que entender es que isset() se preocupa únicamente por la existencia, no por la verdad. Devuelve true incluso cuando el valor es 0, false, "0" o una cadena vacía "" — solo devuelve false para variables que nunca se han definido, que han sido eliminadas con unset o que contienen null.

Esto convierte a isset() en la forma segura de comprobar claves de array y campos de formulario antes de leerlos, evitando las advertencias "Undefined variable" y "Undefined array key" que PHP emite cuando se accede a algo que no existe.

Esta página cubre la sintaxis de isset(), su comportamiento con null, 0 y claves de array inexistentes, cómo comprobar varias variables a la vez, y en qué se diferencia de las funciones relacionadas empty(), is_null() y array_key_exists().

Sintaxis

La sintaxis del constructo isset() es la siguiente:

Sintaxis PHP de isset()

bool isset(mixed $var [, mixed $... ])

El constructo acepta uno o más parámetros, $var y parámetros adicionales opcionales separados por comas. Cada parámetro representa una variable cuya definición se va a comprobar. El constructo devuelve true si todas las variables existen y no son null, y false en caso contrario.

Ejemplo de Uso

A continuación se muestra un ejemplo de cómo usar el constructo isset() en PHP:

Ejemplo de isset() en PHP

<?php
$var1 = "hello";
$var2 = null;
$var3 = 0;
$array = ['key' => 'value'];

if (isset($var1)) {
    echo '$var1 is set and is not null' . "\n";
}
if (isset($var2)) {
    echo '$var2 is set and is not null' . "\n";
} else {
    echo '$var2 is not set or is null' . "\n";
}
if (isset($var3)) {
    echo '$var3 is set (value is 0)' . "\n";
}
if (isset($array['key'])) {
    echo "Array key 'key' is set" . "\n";
}
?>

En este ejemplo, definimos varias variables y un array. Usamos el constructo isset() para comprobar si cada variable o clave de array está definida. La primera sentencia if devuelve true porque $var1 está definida. La segunda sentencia if devuelve false porque $var2 es null, por lo que se ejecuta el bloque else. La tercera sentencia if devuelve true porque $var3 está definida con el valor 0 (lo que demuestra que isset() comprueba la existencia, no la verdad). La cuarta sentencia if devuelve true porque la clave de array 'key' existe.

Comprobar Varias Variables a la Vez

isset() acepta múltiples argumentos y devuelve true solo cuando todos los argumentos están definidos y no son null. En cuanto uno de ellos falta o es null, toda la llamada devuelve false. Esto es útil para validar que un grupo de valores requeridos está completo antes de continuar:

<?php
$name  = "Ada";
$email = "[email protected]";
$phone = null;

if (isset($name, $email)) {
    echo "Both name and email are set" . "\n";
}

if (isset($name, $email, $phone)) {
    echo "All three are set" . "\n";
} else {
    echo "At least one of name, email, phone is missing or null" . "\n";
}
?>

Como $phone es null, el segundo isset() devuelve false aunque los otros dos estén definidos.

Arrays Anidados y Claves Inexistentes

Una razón habitual para usar isset() es leer datos profundamente anidados, como $_POST o una estructura JSON decodificada, donde cualquier nivel puede estar ausente. isset() realiza un cortocircuito seguro: si una clave intermedia no existe, devuelve false en lugar de generar una advertencia.

<?php
$user = [
    'profile' => [
        'name' => 'Grace',
    ],
];

var_dump(isset($user['profile']['name']));   // bool(true)
var_dump(isset($user['profile']['age']));    // bool(false) - key missing
var_dump(isset($user['settings']['theme'])); // bool(false) - 'settings' missing entirely
?>

Hay que tener en cuenta que isset() devuelve false para una clave existente cuyo valor es null. Si es necesario distinguir "la clave existe pero contiene null" de "la clave no existe", use array_key_exists() en su lugar.

isset() vs empty(), is_null() y array_key_exists()

Estas cuatro funciones son fáciles de confundir. La tabla muestra lo que devuelve cada una para una variable $x con distintos valores:

Valor de $xisset($x)empty($x)is_null($x)
"text"truefalsefalse
0 / 0.0 / "0"truetruefalse
"" (cadena vacía)truetruefalse
nullfalsetruetrue
indefinida / unsetfalsetrueadvertencia + true

Conclusiones clave:

  • Use isset() cuando quiera saber si algo existe y no es null — nunca genera advertencias para variables indefinidas.
  • Use empty() cuando quiera saber si un valor es "falso" (0, "", null, false, array vacío, etc.).
  • Use is_null() cuando le importe específicamente el valor null — pero tenga en cuenta que genera advertencias si la variable nunca fue definida.
  • Use array_key_exists() cuando una clave pueda contener legítimamente null y aun así necesite detectar su presencia.

El Atajo del Operador de Fusión Nula

Desde PHP 7, el operador de fusión nula ?? es una alternativa concisa a una comprobación con isset() seguida de un valor por defecto. La expresión $a ?? $b evalúa a $a si está definida y no es null, y en caso contrario a $b — sin ninguna advertencia:

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

// Verbose: explicit isset()
$retries = isset($config['retries']) ? $config['retries'] : 5;
echo $retries . "\n"; // 5

// Concise: same result with the ?? operator
$timeout = $config['timeout'] ?? 60;
echo $timeout . "\n"; // 30
?>

Use ?? cuando solo necesite un valor por defecto; use isset() cuando necesite el resultado booleano en sí, por ejemplo dentro de una condición más amplia.

Conclusión

El constructo isset() es una herramienta útil para comprobar si una variable ha sido definida en PHP. Puede usarse para asegurarse de que una variable existe antes de realizar operaciones sobre ella, o para manejar variables definidas y no definidas de una manera determinada. Usando este constructo, los desarrolladores pueden garantizar que su código trabaja con los datos esperados y evitar errores que pueden producirse al trabajar con valores null.

Práctica

Práctica
¿Cuál es la función de isset() en PHP?
¿Cuál es la función de isset() en PHP?
Was this page helpful?