vendredi 25 septembre 2026

À propos

Contact

Lexique · PHP

Opérateur de fusion nulle

En anglais : « Null coalescing operator »

Syntaxe « ?? » qui renvoie la valeur de gauche si elle existe et n'est pas nulle, sinon la valeur de repli indiquée à droite.

Avant PHP 7, tester qu’une variable existait avant de l’utiliser demandait souvent une combinaison verbeuse d’isset() et d’opérateur ternaire, du genre isset($tab['cle']) ? $tab['cle'] : 'defaut'. L’opérateur de fusion nulle condense cette vérification en un seul symbole, plus court et plus lisible.

Syntaxe

L’écriture $valeur = $tableau['cle'] ?? 'defaut'; revient à dire : « prends $tableau['cle'] si elle est définie et non nulle, sinon prends ‘defaut’ ». Depuis PHP 7.4, la variante ??= permet d’assigner une valeur uniquement si la variable est encore nulle : $options['langue'] ??= 'fr';.

Dans WordPress

Cet opérateur est très employé pour lire des paramètres de requête ou des champs de formulaire sans déclencher d’avertissement : $page = $_GET['page'] ?? 1;. Il remplace avantageusement les anciens appels à isset() qu’on trouve encore dans le code plus ancien du cœur de WordPress et de nombreuses extensions.

Exemple

function wpm_titre_options(array $args): string {
    return $args['titre'] ?? __('Sans titre', 'wpm');
}

$args = [];
echo wpm_titre_options($args); // "Sans titre"

Pièges fréquents

La fusion nulle ne teste que l’absence ou la valeur null : une chaîne vide '' ou le chiffre 0 sont considérés comme des valeurs valides et ne déclenchent donc pas le repli, contrairement à ce qu’on obtiendrait avec un simple test de « faussetée » via ||. Elle ne remplace pas non plus une vraie validation de type ou de format des données reçues : un paramètre défini mais malformé passera sans encombre le test de fusion nulle, alors qu’il aurait dû être rejeté par un contrôle plus strict en amont du traitement.