isset en php c’est quoi ?

La fonction isset en PHP permet de vérifier que le nom de la variable existe et qu’elle n’est pas null, évitant ainsi notices, erreurs et comportements inattendus.Elle renvoie true si la variable est définie et différente de null, sinon false. Elle peut être utilisée avec une ou plusieurs variables dans le même appel. Cependant, il est préférable dans certains cas d’utiliser d’autres fonction telles que empty.

Signature de la fonction isset en PHP

isset(mixed $var, mixed ...$vars): bool

Cette fonction peut prendre un ou plusieurs paramètres. Avec un seul paramètre, elle évaluera si la variable est définie ou non. En revanche, si on lui donne plusieurs paramètres, elle vérifiera si l’intégralité des paramètre existe ou non. Il est donc important de savoir ce que l’on veut faire dans notre script PHP.

<?php

$var = 'Bonjour';

// Exemple simple
if (isset($var)) {
    echo "La variable \$var est définie et n'est pas null.";
} else {
    echo "La variable \$var n'est pas définie ou vaut null.";
}

// Exemple avec plusieurs variables
$a = 1;
$b = null;

if (isset($a, $b)) {
    echo "Les variables \$a et \$b sont toutes les deux définies et non null.";
} else {
    echo "Au moins une des variables \$a ou \$b n'est pas définie ou vaut null.";
}

Dans ce snippet, isset($var) renvoie true car $var contient une chaîne de caractères. En revanche, dans le second test de notre code-source, isset($a, $b) renverra false parce que $b vaut null.


Comment utiliser isset en PHP avec les formulaires ?

Les formulaires HTML sont une des premières sources de variables dynamiques en PHP. Avant d’utiliser une variable issue de $_POST ou $_GET, il est préférable de vérifier sa présence. Dans les scripts PHP, la fonction isset accepte les types de données tels que les chaînes de caractères ou string en anglais, les entiers, les tableaux ou array , les constantes et autres.

Vérifier si un formulaire a été soumis ?

<?php

if (isset($_POST['submit'])) {
    echo "Le formulaire a été soumis.";
    // Ici, tu peux traiter les données du formulaire
} else {
    echo "Formulaire non soumis.";
}

Ici, on suppose que le bouton de soumission du formulaire possède l’attribut name="submit". La condition isset($_POST['submit']) permet de vérifier si le formulaire a bien été envoyé avant de lancer tout traitement.

Vérifier si une variable existe en PHP ?

<?php

$erreurs = [];

if (isset($_POST['submit'])) {

    if (!isset($_POST['nom']) || $_POST['nom'] === '') {
        $erreurs[] = "Le champ nom est obligatoire.";
    }

    if (!isset($_POST['email']) || $_POST['email'] === '') {
        $erreurs[] = "Le champ email est obligatoire.";
    }

    if (empty($erreurs)) {
        echo "Formulaire valide, on peut traiter les données.";
        // Traitement (insertion en base, envoi d'email, etc.)
    } else {
        foreach ($erreurs as $message) {
            echo "<p style='color:red;'>$message</p>";
        }
    }
}

On combine ici isset() avec un contrôle de valeur vide pour s’assurer que les champs existent et contiennent bien quelque chose. Cela évite les notices du type « undefined index ».


Comment protéger l’accès aux tableaux avec isset ?

Les tableaux associatifs sont au cœur de nombreux développements PHP (données utilisateur, réponses d’API, configuration). Il est important de vérifier l’existence des clés avant d’y accéder.

Vérifier une clé dans un tableau associatif

<?php

$user = [
    'name' => 'Alice',
    // 'age' n'est pas défini
];

// Version naïve (à éviter)
echo $user['age']; // Génère une notice si 'age' n'existe pas

// Version protégée
if (isset($user['age'])) {
    echo "Âge de l'utilisateur : " . $user['age'];
} else {
    echo "Âge non renseigné.";
}

La condition isset($user['age']) permet de savoir si la clé age existe et n’est pas null. Sans cette vérification, un accès direct peut générer une notice et rendre le débogage plus pénible.

Utiliser isset avec un tableau multidimensionnel

<?php

$users = [
    1 => [
        'name'    => 'Alice',
        'profile' => [
            'email'  => 'alice@example.com',
            'avatar' => 'alice.png'
        ]
    ],
    2 => [
        'name'    => 'Bob',
        'profile' => [
            'email' => 'bob@example.com'
            // 'avatar' manquant
        ]
    ]
];

$userId = 2;

// On veut récupérer l'avatar de l'utilisateur 2
if (isset($users[$userId]['profile']['avatar'])) {
    $avatar = $users[$userId]['profile']['avatar'];
} else {
    $avatar = 'default.png';
}

echo "Avatar utilisé : " . $avatar;

Dans cet exemple, isset($users[$userId]['profile']['avatar']) s’assure en une seule fois que l’index de l’utilisateur, la clé profile et la clé avatar existent et ne valent pas null avant d’y accéder. Sinon, on tombe sur une valeur par défaut (default.png).


Comment gérer les sessions et la configuration avec isset()

Pour tout ce qui touche à l’authentification et à la configuration, isset() est également un allié précieux.

Vérifier si un utilisateur est connecté

<?php

session_start();

if (isset($_SESSION['user_id'])) {
    echo "Utilisateur connecté, ID : " . $_SESSION['user_id'];
    // Contenu réservé aux membres
} else {
    echo "Vous n'êtes pas connecté.";
    // Lien vers la page de connexion, etc.
}

Ici, isset($_SESSION['user_id']) permet de déterminer si l’utilisateur dispose d’une session valide contenant son identifiant. C’est une base simple pour contrôler l’accès à des pages protégées.

Vérifier des options de configuration

<?php

$config = [
    'db_host' => 'localhost',
    'db_user' => 'root',
    // 'db_pass' est éventuellement absent
];

if (isset($config['db_host'], $config['db_user'])) {
    echo "Configuration minimale pour la base de données présente.";
    // Connexion possible avec les informations disponibles
} else {
    echo "Configuration de la base de données incomplète.";
}

L’utilisation de isset() sur plusieurs clés à la fois permet de vérifier rapidement que la configuration possède au moins les paramètres indispensables.


Éviter les notices et rendre le code plus propre

isset() est souvent utilisé pour éviter les « undefined variable » ou « undefined index » qui encombrent les logs.

Accéder à des variables potentiellement non définies

<?php

// Imaginons que $debug n'est définie que dans certains contextes
if (isset($debug)) {
    var_dump($debug);
} else {
    echo "Mode debug inactif.";
}

Ce pattern est utile lorsqu’une variable n’est initialisée qu’en fonction d’une configuration ou d’un environnement (développement, production, etc.).

Protéger l’accès aux données d’API ou de sources externes

<?php

$response = [
    'status' => 'ok',
    // 'data' peut parfois être absent selon la réponse de l’API
];

if (isset($response['data'])) {
    // Traitement des données
    print_r($response['data']);
} else {
    echo "Aucune donnée disponible, vérifier la réponse de l'API.";
}

Les structures de données issues d’API étant souvent variables, l’utilisation de isset() permet de rendre le code plus sûr et plus explicite sur ce qu’on attend.


Combiner isset() avec l’opérateur ternaire

Le ternaire est très pratique pour fournir des valeurs par défaut tout en gardant un code concis.

Fournir une valeur par défaut proprement

<?php

$user = [
    'name' => 'Alice'
    // 'nickname' non défini
];

$nickname = isset($user['nickname']) ? $user['nickname'] : 'Invité';

echo "Pseudo : " . $nickname;

Ici, si nickname n’existe pas, la variable $nickname prendra la valeur 'Invité'. Ce pattern est extrêmement courant pour gérer des options facultatives.

Utiliser isset() ou l’opérateur de coalescence (??) en PHP

L’opérateur de coalescence null ?? simplifie des patterns très courants basés sur isset(), mais il ne se comporte pas exactement de la même manière.

<?php

$user = [
    'name'     => 'Alice',
    'nickname' => null
];

// Avec isset()
if (isset($user['nickname'])) {
    $nickname = $user['nickname'];
} else {
    $nickname = 'Invité';
}

echo $nickname; // Affiche "Invité" car nickname est null

Ici, isset($user['nickname']) renvoie false parce que la clé existe mais vaut null, donc on utilise la valeur par défaut 'Invité'.

Comment fonctionne la coalescence ?

L’opérateur ?? retourne la première opérande définie et non null, sinon la suivante. Il combine en une seule opération le test d’existence et la valeur par défaut.

<?php

$user = [
    'name'     => 'Alice',
    'nickname' => null
];

// Équivalent plus concis avec ??
$nickname = $user['nickname'] ?? 'Invité';

echo $nickname; // Affiche "Invité"

Ce code est fonctionnellement similaire au pattern classique avec isset() + ternaire :

$nickname = isset($user['nickname']) ? $user['nickname'] : 'Invité';

Points clés à retenir

  • isset() est une fonction, plus verbeuse mais très explicite (et disponible depuis toujours).
  • ?? est plus concis et lisible pour les valeurs par défaut, surtout enchaînées :
    $_GET['page'] ?? $_POST['page'] ?? 1;
  • Les deux reposent sur la même idée : considérer null comme « absence de valeur », mais ?? est pensé pour ce cas d’usage précis.

Quelle est la différence entre Isset et !empty en PHP  ?

isset() et empty() sont souvent utilisés ensemble pour valider des données, mais ils testent des choses différentes. Comprendre leurs comportements respectifs permet d’écrire un code plus prévisible.

<?php

$var1 = '';      // Chaîne vide
$var2 = 0;       // Zéro
$var3 = null;    // Null
$var4 = false;   // Booléen faux

var_dump(isset($var1)); // true
var_dump(isset($var2)); // true  
var_dump(isset($var3)); // false
var_dump(isset($var4)); // true

Comportement de empty()

empty() teste si une variable est « vide » selon les règles PHP (chaîne vide, 0, false, null, etc.).

<?php

$var1 = '';      // Chaîne vide
$var2 = 0;       // Zéro
$var3 = null;    // Null
$var4 = false;   // Booléen faux
$var5 = 'test';  // Chaîne valide

var_dump(empty($var1)); // true
var_dump(empty($var2)); // true
var_dump(empty($var3)); // true
var_dump(empty($var4)); // true
var_dump(empty($var5)); // false

empty() considère plusieurs valeurs comme « vides » : ''00.0'0'nullfalsearray(), et variables non définies.

Exemple pratique : validation de formulaire

<?php

$_POST['nom'] = '';    // Soumis mais vide
$_POST['age'] = 0;     // Soumis mais 0

// Avec isset() seul
if (isset($_POST['nom'])) {
    echo "nom existe (mais peut être vide)";
}

// Avec !empty() seul  
if (!empty($_POST['nom'])) {
    echo "nom existe ET contient quelque chose";
} else {
    echo "nom vide ou absent";
}

// Combinaison idéale pour formulaires
if (isset($_POST['nom']) && !empty($_POST['nom'])) {
    echo "nom valide et non vide";
}

Quand utiliser l’un ou l’autre ?

Situationisset()!empty()isset() && !empty()
Vérifier existence seule
Vérifier contenu non vide
Formulaires (champs obligatoires)⚠️⚠️
Variables de config (optionnelles)
Compteurs (0 = valeur valide)

Règle d’or : utiliser isset() pour vérifier l’existence, !empty() pour vérifier l’existence et le contenu, si une variable contient une valeur alors on peut dire qu’elle existe obligatoirement.

isset() vs defined() en PHP : contexte et portée

isset() et defined() testent l’existence de quelque chose en PHP, mais dans des contextes totalement différents. isset() s’applique aux variables runtime, tandis que defined() concerne les constantes définies au niveau du script.

<?php

$name = 'Alice';
$debug = null;

var_dump(isset($name));  // true (variable définie, non null)
var_dump(isset($debug)); // false (valeur null)
var_dump(isset($age));   // false (variable inexistante)

// Avec tableaux
$user = ['name' => 'Bob'];
var_dump(isset($user['name'])); // true
var_dump(isset($user['age']));  // false

isset() est dynamique : elle teste l’état des variables à l’exécution du script.

Comportement de defined()

defined() vérifie si une constante a été définie (via define() ou const).

<?php

// Définir des constantes
define('APP_NAME', 'MonApp');
const DEBUG_MODE = true;

var_dump(defined('APP_NAME'));   // true
var_dump(defined('DEBUG_MODE')); // true
var_dump(defined('DB_HOST'));    // false (non définie)

echo APP_NAME;     // "MonApp"
echo constant('APP_NAME'); // Alternative pour accès dynamique

defined() ne fonctionne qu’avec les constantes, jamais avec les variables.

Exemple pratique : configuration d’application

<?php

// Fichier config.php
define('DB_HOST', 'localhost');
define('DEBUG', true);

// Dans l'application
if (defined('DB_HOST')) {
    echo "Hôte DB : " . DB_HOST;
} else {
    echo "DB_HOST non configuré";
}

if (defined('DEBUG') && DEBUG) {
    echo "Mode debug activé";
}

// ERREUR si on mélange les deux
if (isset(DB_HOST)) { // ❌ Ne marche PAS ! DB_HOST n'est pas une variable
    // Ceci génère une notice
}

Usage typique : defined() dans les fichiers de configuration (config.php), isset() partout ailleurs pour les variables et tableaux.

Tableau récapitulatif des différences entre isset et defined en PHP

Critèreisset()defined()
CibleVariables, clés de tableauxConstantes uniquement
Test nullOui (retourne false si null)Non (les constantes ne peuvent pas être null)
ContexteRuntime (exécution)Toute la durée de vie du script
Exemple typiqueisset($_POST['id'])defined('ENV_PROD')
Depuis PHPToujoursPHP 4.1.0

Aide mémoire : isset() → variables (je set mes variables), defined() → constantes (définies une bonne fois pour toutes).


Bonnes pratiques et erreurs courantes

  • Utiliser isset() pour vérifier l’existence et la non-nullité d’une variable avant accès.
  • Ne pas confondre isset() avec empty() : empty() considère plusieurs valeurs comme « vides » (0, chaîne vide, etc.).
  • Sur les tableaux, penser aussi à array_key_exists() si on veut savoir si une clé existe, même si sa valeur est null.
  • Éviter de surcharger le code avec des isset() partout : cibler les endroits où l’on accède à des données externes ou optionnelles.
  • Centraliser certaines vérifications dans des fonctions utilitaires (par exemple getParam($source, $key, $default) qui encapsule isset()).

Conclusion

La fonction isset() est simple mais essentielle en PHP. Elle intervient dès que tu manipules des variables facultatives, des formulaires, des sessions, des réponses d’API ou des tableaux multidimensionnels. Bien maîtrisée, elle permet de réduire les notices, de sécuriser l’accès aux données et de rendre ton code plus clair pour toi comme pour tes lecteurs.

Cours

Variables et types

Manipulation de chaînes

Tableaux

Fichiers et système

Sécurité, session et cookie