Objets et références

Petit nouveau ! | 5 Messages

25 août 2008, 12:52

C'est mon premier post et je vous adresse à tous un chaleureux bonjour.

Ma question est la suivante : doit-on utiliser des références lorsqu'on affecte des instances d'objets à des variables, ou lorsqu'on fait passer des instances d'objet dans des arguments ?

Est-ce qu'il y a un gain performances/mémoire ? Ou est-ce que cela ne sert à rien car php utilise tout seul automatiquement des références lorsqu'on manipule des instances d'objet ?

En vous remerciant d'avance, c'est un point que je n'arrive pas à éclaircir.

Manu C

ViPHP
ViPHP | 5924 Messages

25 août 2008, 13:49

C'est une affaire purement comportementale et non de performance. Bien entendu il sera plus long de faire une copie d'un objet plutôt que de ne manipuler qu'un seul objet, mais surtout si la manipulation ne se fait pas par référence la modification d'un objet n'entraine pas celle des autres…

Ensuite, il faut savoir que cela dépend beaucoup de ta version de PHP. En PHP4, en effet, tu as ce problème de références, parce qu'un objet, par défaut est passé par valeur, c'est à dire recopié lors de l'affectation. En PHP5, tout objet est passé par référence, il n'y a à aucun moment recopie, sauf quand c'est explicitement indiqué avec le mot clé clone.

Si tu travailles en PHP5, la question ne se pose donc pas. Si tu travailles en PHP4, il est très fortement conseillé (hormis de mettre à jour sa version de PHP vers PHP5), de travailler avec les références pour de nombreuses raisons, à commencer par la compatibilité ascendante, mais aussi la logique par rapport aux principes de la grosse majorité des langages OO…

Petit nouveau ! | 5 Messages

25 août 2008, 14:04

Je travaille effectivement en php5.
Merci de m'avoir répondu.

Eléphanteau du PHP | 36 Messages

01 sept. 2008, 18:00

La règle d'or : en PHP5, tout objet est systématiquement passé par référence, quoi qu'il arrive.

Si l'on ne veut pas de référence, il faut utiliser le mot-clé 'clone'
Julien Pauli - Formateur pôle PHP ZendFramework chez Anaska
Contributeur au projet Zend Framework
Ma page de tutoriaux, mon blog