OUJOOD.COM
À quoi sert is_null() ?
Disponible depuis PHP 4.0.4, is_null() répond à une question simple : est-ce que cette variable vaut exactement NULL ? Pas 0, pas false, pas une chaîne vide — NULL. Rien d'autre. C'est ce test précis qui lui donne son utilité, notamment face à isset() et empty() qui, eux, traitent NULL comme l'un parmi d'autres "non-valeurs".
Syntaxe
bool is_null(mixed $var)
La fonction accepte n'importe quel type en paramètre et retourne un booléen : TRUE si la variable vaut NULL, FALSE dans tous les autres cas.
Différence entre is_null(), isset() et empty()
Trois fonctions, trois comportements différents face à NULL :
- is_null() : TRUE uniquement si la variable vaut NULL
- isset() : FALSE si la variable est NULL ou non définie
- empty() : TRUE pour NULL, 0, false, "", "0", array() et variables non définies
Exemple de base : variable NULL
<?php // Activation du rapport d'erreurs pour le débogage error_reporting(E_ALL); // Variable explicitement NULL $foo = NULL; // $inexistent n'existe pas : génère une Notice // $foo vaut NULL : is_null() retourne TRUE dans les deux cas var_dump(is_null($inexistent), is_null($foo)); ?>
Résultat :
Notice: Undefined variable: inexistent in (file) on line 6
bool(true)
bool(true)
is_null() retourne TRUE aussi bien pour une variable non définie que pour une variable explicitement mise à NULL — avec Notice dans le premier cas. Si les Notices vous gênent, isset() gère ça sans bruit.
Comparaison avec isset() et empty()
<?php // Test 1 : variable NULL $variable_null = NULL; echo "Variable NULL :<br>"; echo "is_null() : " . (is_null($variable_null) ? 'TRUE' : 'FALSE') . "<br>"; echo "isset() : " . (isset($variable_null) ? 'TRUE' : 'FALSE') . "<br>"; echo "empty() : " . (empty($variable_null) ? 'TRUE' : 'FALSE') . "<br><br>"; // Test 2 : variable à 0 $variable_zero = 0; echo "Variable = 0 :<br>"; echo "is_null() : " . (is_null($variable_zero) ? 'TRUE' : 'FALSE') . "<br>"; echo "isset() : " . (isset($variable_zero) ? 'TRUE' : 'FALSE') . "<br>"; echo "empty() : " . (empty($variable_zero) ? 'TRUE' : 'FALSE') . "<br><br>"; // Test 3 : chaîne vide $variable_vide = ""; echo "Variable chaîne vide :<br>"; echo "is_null() : " . (is_null($variable_vide) ? 'TRUE' : 'FALSE') . "<br>"; echo "isset() : " . (isset($variable_vide) ? 'TRUE' : 'FALSE') . "<br>"; echo "empty() : " . (empty($variable_vide) ? 'TRUE' : 'FALSE') . "<br>"; ?>
Cas d'usage pratiques
<?php // Cas 1 : paramètre optionnel de fonction function traiterDonnees($donnees, $options = NULL) { if (is_null($options)) { echo "Utilisation des options par défaut<br>"; $options = ['mode' => 'standard', 'debug' => false]; } return "Données traitées avec le mode : " . $options['mode']; } echo traiterDonnees("test") . "<br><br>"; // Cas 2 : résultat de requête non trouvé function rechercherUtilisateur($id) { $resultat = NULL; // utilisateur non trouvé if (is_null($resultat)) { return "Utilisateur #$id introuvable"; } return $resultat; } echo rechercherUtilisateur(999) . "<br><br>"; // Cas 3 : initialisation conditionnelle $cache = NULL; if (is_null($cache)) { echo "Initialisation du cache...<br>"; $cache = ['data' => [], 'timestamp' => time()]; } print_r($cache); ?>
Bonnes pratiques
- Réservez is_null() aux cas où la distinction entre NULL, 0, false et chaîne vide a vraiment de l'importance. Pour un simple test d'existence, isset() est plus court et plus sûr.
- isset() ne lève pas de Notice sur les variables non définies — is_null() oui. Sur du code de production avec des variables d'entrée non maîtrisées, ça fait une différence dans les logs.
- Activez error_reporting(E_ALL) en développement : is_null() sur une variable non initialisée passe silencieusement en production, mais ça cache souvent un bug d'initialisation.
- En PHP 8, l'opérateur ?? couvre la majorité des cas où on utilisait is_null() pour attribuer une valeur par défaut — une ligne au lieu de trois.
Alternatives modernes en PHP 8
<?php $valeur = NULL; // Ancienne méthode avec is_null() $resultat1 = is_null($valeur) ? "Valeur par défaut" : $valeur; // Équivalent avec ?? — plus concis $resultat2 = $valeur ?? "Valeur par défaut"; echo "Résultat 1 : $resultat1<br>"; echo "Résultat 2 : $resultat2<br><br>"; // Null safe operator sur les propriétés d'objets (PHP 8+) class Utilisateur { public $profil = NULL; } $user = new Utilisateur(); // Avec is_null() : deux vérifications imbriquées if (!is_null($user->profil) && !is_null($user->profil->nom)) { echo $user->profil->nom; } // Avec ?? : une seule ligne echo $user->profil->nom ?? "Profil non défini"; ?>
Par carabde | Mis à jour le 29 avril 2026