Menu

PHP isset() : vérifier une variable ou une clé de tableau

isset($var) renvoie true quand une variable existe et ne vaut pas null, et false sinon, sans aucun warning. Elle vérifie aussi les clés de tableau et les propriétés d'objet : isset($user['email']). isset avec plusieurs variables, clés imbriquées, isset ou empty, isset ou array_key_exists, et la vérification de l'envoi d'un formulaire.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

isset($var) renvoie true si la variable existe et que sa valeur ne vaut pas null. Elle renvoie false pour une variable non définie, supprimée avec unset ou contenant null, et n'affiche jamais de warning.

isset() regarde seulement si quelque chose est présent. Une valeur définie mais vide, comme 0, "" ou [], renvoie quand même true. Si vous voulez « définie et non vide », utilisez empty (inversée).

Vérifier si une clé de tableau existe avec isset

C'est l'usage le plus courant de isset(). Lire une clé qui n'existe pas affiche Warning: Undefined array key sur une configuration PHP normale ; la vérifier d'abord avec isset() n'affiche rien. Cela fonctionne aussi pour les clés imbriquées, et s'arrête sans bruit au premier niveau manquant.

Quand vous avez seulement besoin de la valeur ou d'une valeur par défaut, $user["website"] ?? "none" fait la même vérification en une étape. Voir l'opérateur de fusion null.

isset avec plusieurs variables

Passez plusieurs arguments et isset() ne renvoie true que si tous sont définis et différents de null. C'est une façon courte de vérifier que chaque champ obligatoire est arrivé.

isset sur des chaînes et des objets

Sur une chaîne, isset($str[5]) vérifie s'il y a un caractère à la position 5, ce qui permet de vérifier rapidement une longueur. Sur un objet, elle vérifie une propriété ; pour une classe aux données privées, isset() appelle la méthode __isset() si la classe en définit une.

isset, empty ou is_null

Choisissez une valeur de $x dans le tableau pour comparer les trois vérifications et le simple cast (bool). Chaque case a été calculée par PHP 8.3.

isset, empty et is_null pour chaque valeur 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.

Le principe à retenir :

  • isset() vaut false seulement pour null et pour ce qui n'existe pas.
  • empty() vaut true pour ces cas et aussi pour toute valeur évaluée à faux : false, 0, 0.0, "", "0", [].
  • is_null() donne l'inverse de isset() pour les variables existantes, mais affiche un warning quand la variable n'est pas définie. Utilisez plutôt isset() ou === null.

Vérifier si un formulaire a été envoyé

isset() est la façon classique de savoir si un champ de formulaire est arrivé. Exécutez ce bloc, tapez un nom et cliquez sur Send : le même script s'exécute à nouveau avec $_POST rempli.

Un champ texte vide est quand même envoyé, sous la forme "", donc isset($_POST["name"]) vaut true après n'importe quel envoi. Une case à cocher non cochée n'est pas envoyée du tout, ce qui fait de isset() le test exact pour les cases à cocher. Pour exiger une valeur non vide, vérifiez la chaîne après trim comme le fait le bloc. La page sur les formulaires construit un formulaire complet avec validation.

isset ou array_key_exists

Les deux sont d'accord sur tout sauf sur une clé dont la valeur est null. isset() la considère comme absente, pas array_key_exists().

Si « défini à null » signifie autre chose que « non configuré » dans vos données, utilisez array_key_exists(). Sinon isset() est plus court, et c'est une construction du langage plutôt qu'un appel de fonction, donc un peu plus rapide.

Erreur fréquente : isset sur une expression

isset() n'accepte que des variables, des éléments de tableau et des propriétés. Lui passer le résultat d'une fonction ou une constante est une erreur de compilation :

<?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

Stockez d'abord le résultat dans une variable, ou testez la valeur elle-même : null !== $expr comme le suggère le message, ou trim($input) !== "" pour une chaîne.

Questions fréquentes

Que fait isset() en PHP ?

isset($x) renvoie true si $x existe et ne vaut pas null, et false sinon. Elle ne déclenche jamais de warning pour une variable ou une clé de tableau non définie, elle est donc sûre sur des données de requête comme isset($_POST['email']).

Quelle est la différence entre isset() et empty() en PHP ?

isset() demande « est-ce que cela existe et ne vaut pas null » ; empty() demande « est-ce que cela manque ou est évalué à faux ». Pour 0, "", "0" et [], isset() renvoie true et empty() renvoie aussi true. Pour null ou une clé manquante, isset() vaut false et empty() vaut true. !empty($x) équivaut à isset($x) && $x évalué à vrai.

isset() peut-elle vérifier plusieurs variables ?

Oui : isset($a, $b, $c) ne renvoie true que si chacune est définie et ne vaut pas null. Elle s'arrête à la première qui n'est pas définie.

Faut-il utiliser isset() ou array_key_exists() ?

Elles ne diffèrent que quand la clé existe avec la valeur null : isset($arr['k']) renvoie false, array_key_exists('k', $arr) renvoie true. Utilisez array_key_exists quand null est une valeur stockée qui a un sens ; sinon isset est plus court et un peu plus rapide.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER