isset
La construction isset() en PHP vérifie si une variable est définie et non nulle. Cet article couvre la syntaxe, les cas d'usage et les comparaisons.
La fonction PHP isset()
isset() est une construction du langage PHP qui retourne true lorsqu'une variable existe (a été assignée) et n'est pas null. Elle retourne false si la variable n'a jamais été définie, a été explicitement assignée à null, ou a été supprimée avec unset().
Comme la lecture d'une variable non définie déclenche un avis Warning: Undefined variable en PHP, isset() est la méthode standard, sans effets secondaires, pour demander « ai-je une valeur utilisable ici ? » avant de l'utiliser réellement — par exemple, pour protéger l'accès à $_GET, $_POST, ou aux clés de tableau pouvant ne pas être présentes.
Ce chapitre couvre la syntaxe, la forme à plusieurs arguments, son comportement avec les tableaux et les propriétés d'objet, et comment elle se compare à des outils connexes comme empty() et l'opérateur de fusion null.
Syntaxe
isset(mixed $var, mixed ...$vars): boolUne protection minimale ressemble à ceci :
if (isset($myVariable)) {
echo "The variable is set.";
} else {
echo "The variable is not set.";
}isset() est une construction du langage, pas un appel de fonction, donc vous n'avez pas besoin d'inclure ou d'importer quoi que ce soit pour l'utiliser, et vous pouvez passer plusieurs variables à la fois (voir ci-dessous).
Exemples de base
<?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 setSortie :
set
not set
not setLe troisième cas est le piège principal : assigner null suffit à faire retourner false à isset(), même si la variable existe techniquement. Si vous devez distinguer « jamais déclarée » de « déclarée mais nulle », utilisez plutôt is_null() ou array_key_exists().
Vérifier plusieurs variables à la fois
Lorsque vous passez plus d'un argument, isset() retourne true uniquement si chaque argument est défini et non nul. C'est pratique pour valider qu'un groupe de champs de formulaire obligatoires sont tous arrivés ensemble.
<?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() avec les tableaux
isset() fonctionne sur les éléments de tableau et vérifie en toute sécurité les clés imbriquées sans déclencher d'avertissement lorsqu'une clé intermédiaire est manquante.
<?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 warningNotez que isset($array['key']) retourne false lorsque la valeur à cette clé est null. Si une clé peut légitimement contenir null et que vous vous intéressez uniquement à la présence de la clé, utilisez array_key_exists().
isset() vs. empty() vs. l'opérateur de fusion null
Ces trois constructions sont souvent confondues. Le tableau montre ce que chacune retourne pour la même entrée :
Valeur de $x | isset($x) | empty($x) |
|---|---|---|
"hello" | true | false |
0 ou "0" ou "" | true | true |
null | false | true |
| non définie | false | true |
Utilisez donc isset() pour demander « existe-t-il une vraie valeur ici ? », et empty() pour demander « cette valeur est-elle manquante ou fausse (chaîne vide, 0, false, tableau vide) ? ».
Depuis PHP 7, l'opérateur de fusion null ?? s'appuie sur la sémantique de isset() pour fournir une valeur par défaut en une seule expression — c'est le remplacement idiomatique du ternaire 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' est évalué à 'light' sans avertissement, précisément parce que ?? vérifie isset() en interne.
Quand utiliser isset()
- Protéger les données de requête optionnelles :
if (isset($_GET['page'])) { ... }. - Confirmer les champs obligatoires avant de traiter un formulaire (
isset($a, $b, $c)). - Lire en toute sécurité des clés de tableau potentiellement manquantes dans une configuration ou des données JSON décodées.
- Initialiser paresseusement une valeur une seule fois :
$cache ??= computeExpensiveValue();.
Optez pour un autre outil lorsque vous devez traiter null comme « présent » (array_key_exists()), vérifier si le contenu d'un objet ou d'un tableau est faux (empty()), ou supprimer entièrement une variable (unset()).