Celle ci je ne peux me retenir de la copier car elle est magnifique :
$override = null; if ($notify_admin and $conf['browser_language']) { if (!get_browser_language($override['language'])) { $override=null; } }
À première vue, le code ne fait rien. À la seconde lecture non plus, je vous rassure.
Après explication, la méthode get_browser_language
utilise un passage par référence (oui, avec ce nom là…), c’est à dire que la variable qui est passée en argument pourra voir sa valeur modifiée.
Eureka! En sortie de code on pourrait bien avoir une variable $override
qui contient quelque chose. On a au passage fait une création de tableau implicite en utilisant la syntaxe avec crochets sur une valeur nulle (conseil : ne jamais faire ça si vous souhaitez rester lisible).
La seconde affectation $override=null
sert si jamais get_browser_language
a bien modifié $override['language']
mais a renvoyé une valeur évaluée à false
.
Mais pourquoi cette seconde affectation à null
? Et bien il se trouve que la fonction get_browser_language
renvoie false
si elle ne modifie pas la variable passée par référence. Dans ce cas le code d’appel aurait quand même créé un tableau dans $override
à cause de override['language']
, il faut donc revenir en arrière et écraser ce tableau créé implicitement.
À retenir :
- Ne jamais créer de tableau implictement avec l’opérateur crochet sur une valeur
null
. - Ne jamais attendre un retour par référence sur une fonction qui s’appelle « get_* »
- Globalement, ne quasiment jamais utiliser le passage par référence pour récupérer une simple valeur.
Ici en plus vu qu’on utilise déjà l’évaluation à true
ou false
du retour de get_browser_language
, autant lui faire retourner directement la langue, ou null
si aucune n’est trouvée.
Laisser un commentaire