isset
La función isset() en PHP determina si una variable está definida y no es null. Aprende su sintaxis, uso con arrays y comparación con empty().
La función isset() de PHP
isset() es una construcción del lenguaje PHP que devuelve true cuando una variable existe (ha sido asignada) y no es null. Devuelve false si la variable nunca fue definida, fue explícitamente establecida a null, o fue eliminada con unset().
Como leer una variable no definida genera un aviso Warning: Undefined variable en PHP, isset() es la forma estándar y sin efectos secundarios de preguntar "¿tengo un valor utilizable aquí?" antes de usarlo — por ejemplo, para proteger el acceso a $_GET, $_POST, o claves de array que pueden no estar presentes.
Este capítulo cubre la sintaxis, la forma con múltiples argumentos, cómo se comporta con arrays y propiedades de objetos, y cómo se compara con herramientas relacionadas como empty() y el operador de fusión null.
Sintaxis
isset(mixed $var, mixed ...$vars): boolUna guarda mínima tiene este aspecto:
if (isset($myVariable)) {
echo "The variable is set.";
} else {
echo "The variable is not set.";
}isset() es una construcción del lenguaje, no una llamada a función, por lo que no necesitas incluir ni importar nada para usarla, y puedes pasar varias variables a la vez (se explica a continuación).
Ejemplos básicos
<?php
// Example 1 — an assigned, non-null variable
$myVariable = "Hello, world!";
echo isset($myVariable) ? "set" : "not set"; // set
echo PHP_EOL;
// Example 2 — a variable that was never declared
echo isset($someOtherVariable) ? "set" : "not set"; // not set
echo PHP_EOL;
// Example 3 — a variable explicitly set to null
$empty = null;
echo isset($empty) ? "set" : "not set"; // not setSalida:
set
not set
not setEl tercer caso es el error más habitual: asignar null es suficiente para que isset() devuelva false, aunque la variable exista técnicamente. Si necesitas distinguir entre "nunca declarada" y "declarada pero null", usa is_null() o array_key_exists() en su lugar.
Verificar múltiples variables a la vez
Cuando pasas más de un argumento, isset() devuelve true solo si todos los argumentos están definidos y no son null. Esto es útil para validar que un grupo de campos de formulario requeridos llegaron todos juntos.
<?php
$name = "Ada";
$email = "[email protected]";
$phone = null;
var_dump(isset($name, $email)); // bool(true)
var_dump(isset($name, $email, $phone)); // bool(false) — $phone is nullisset() con arrays
isset() funciona con elementos de array y comprueba de forma segura claves anidadas sin generar un aviso cuando falta una clave intermedia.
<?php
$user = [
'name' => 'Ada',
'address' => ['city' => 'London'],
];
var_dump(isset($user['name'])); // bool(true)
var_dump(isset($user['missing'])); // bool(false)
var_dump(isset($user['address']['city'])); // bool(true)
var_dump(isset($user['address']['zip'])); // bool(false) — no warningTen en cuenta que isset($array['key']) devuelve false cuando el valor en esa clave es null. Si una clave puede contener legítimamente null y solo te importa si la clave está presente, usa array_key_exists().
isset() vs. empty() vs. el operador de fusión null
Estos tres se confunden con frecuencia. La tabla muestra lo que devuelve cada uno para la misma entrada:
Valor de $x | isset($x) | empty($x) |
|---|---|---|
"hello" | true | false |
0 o "0" o "" | true | true |
null | false | true |
| no definida | false | true |
Usa isset() para preguntar "¿existe un valor real aquí?", y empty() para preguntar "¿falta esto o es falsy (cadena vacía, 0, false, array vacío)?".
Desde PHP 7, el operador de fusión null ?? se basa en la semántica de isset() para proporcionar un valor por defecto en una sola expresión — es el reemplazo idiomático del ternario isset() ? : :
<?php
$config = ['theme' => 'dark'];
// Verbose, pre-PHP 7 style:
$theme = isset($config['theme']) ? $config['theme'] : 'light';
// Equivalent with the null coalescing operator:
$theme = $config['theme'] ?? 'light';
echo $theme; // dark$config['missing'] ?? 'light' se evalúa como 'light' sin ningún aviso, precisamente porque ?? comprueba isset() internamente.
Cuándo usar isset()
- Para proteger datos de solicitud opcionales:
if (isset($_GET['page'])) { ... }. - Para confirmar campos requeridos antes de procesar un formulario (
isset($a, $b, $c)). - Para leer de forma segura claves posiblemente ausentes en configuraciones o datos decodificados con JSON.
- Para inicializar de forma perezosa un valor solo una vez:
$cache ??= computeExpensiveValue();.
Usa una herramienta diferente cuando necesites tratar null como "presente" (array_key_exists()), comprobar si el contenido de un objeto o array es falsy (empty()), o eliminar una variable por completo (unset()).