Les variables en PHP : bien utiliser les références ?

Récemment, je me suis retrouvé sur l’écriture $user =& JFactory::getUser();. Est ce un vestige de PHP 4 ou une utilisation appropriée des références ?

Quelques recherche sur le Web, et j’ai trouvé un article remarquable sur les variables en PHP, qui va beaucoup plus loin que la documentation PHP sur les références en expliquant les détails d’implémentation dans le Zend Engine. C’est un document de référence, c’est le cas de le dire.

Maitrise de la gestion des variables en PHP par Julien Pauli
Un passage très intéressant concernent les objets :

On entend souvent dire : « en PHP5, les objets sont toujours des références… » Hum, c’est faux. Il n’y a une référence que s’il y a un signe « & ».
Si en PHP5 nous ne sommes plus obligés de mettre un caractère ‘&’ devant nos variables lorsque ce sont des objets (pour passer l’objet ‘lui-même’), c’est tout simplement parce qu’en interne PHP5 gère les objets de manière totalement différente de feu PHP4. En PHP4, un objet était représenté dans un conteneur zval tout à fait classique. En PHP5, ce n’est plus l’objet qui est dans la zval, mais un numéro unique servant à retrouver cet objet dans une mémoire globale dans le Zend Engine (Object store).
Ainsi, en PHP5, les affectations sur des symboles représentant des objets se font bel et bien par copie, mais on ne fait que copier un numéro d’identification qui au bout du compte, représente bien le même objet.

Pour revenir à mon exemple, il s’agissait bien d’un vestige de PHP 4. La référence n’est pas utile dans ce cas, Elle génère même une erreur. Plus généralement, on peut conseiller de limiter l’utilisation des références uniquement lorsque c’est absolument nécessaire, et le développeur qui les utilisent se doit de connaitre les concepts du C relatifs aux pointeurs et la gestion de la mémoire.

Articles liés

Modifier une collection à chaud en PHP
Utiliser FormData de l’API XMLHttpRequest Level 2
Design pattern : Singleton
Krumo : var_dump et print_r amélioré
Pourquoi faut’il utiliser les CDN même sur les petits sites?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">