logo oujood
🔍

La fonction is_null() en PHP

is_null() teste si une variable vaut exactement NULL — ni 0, ni false, ni une chaîne vide. Syntaxe, cas d'usage et différences avec isset() et empty().

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

  📋 Copier le code

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

  📋 Copier le code

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

  📋 Copier le code

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

  📋 Copier le code

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