Tomber en marche
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.
Merci ! Votre commentaire est bien reçu. Il sera relu avant d’apparaître ici pour tout le monde, ce qui peut prendre du temps.
Merci ! Votre message est bien reçu ; il ne sera pas publié.
Merci ! Votre réponse est signalée. Elle sera vérifiée avant d’apparaître ici pour tout le monde, ce qui peut prendre du temps.
Votre envoi n’a pas pu être enregistré. Réessayez plus tard, ou écrivez-moi par email.