Coalesce et l’erreur fatale
<?php
$a = 1;
$b = $a['c'] ?? 'b';
$b = $a->c ?? 'b';
$a = [];
$b = $a->f ?? 'b';
$a = new stdclass();
$b = $a['f'] ?? 'b';
L’opérateur de coalescence est basé sur la fonctionnalité isset() de PHP. À ce titre, il est sujet aux mêmes problèmes. C’est le cas avec une erreur fatale insidieuse.
En général, la coalescence masque toute vérification d’existence sur l’opérande gauche : ainsi, la valeur par défaut peut être utilisée sans avertissement intempestif. Cela ne s’applique pas lorsqu’on tente d’accéder à un index de tableau sur un objet : cela produit en fait une erreur fatale.
Une telle situation est généralement rare, car la structure de la variable est habituellement connue dans une certaine mesure. En revanche, lorsqu’on utilise ?? sur le résultat d’un jeu de données non structuré, comme issu d’un JSON ou d’un YAML (ou autre), cela devient bien plus hasardeux.
Notez que json_decode() dispose d’une option pour générer un objet ou un tableau. Dans ce cas, il est plus sûr de générer un tableau, qui ne produit pas d’erreurs fatales. Cela peut également s’exécuter plus rapidement.
See Also
PHP Error Messages
PHP Features
Last updated: 04 October 2026