2010-12-15 69 views
1

En PHP, toutes les variables objet sont des pointeurs en fait à des objets (non?), La langue gère implicitement (à droite?), Mais je vois le code beaucoup php spécifiant les références dans les paramètres tels que ceci:L'utilisation de & pour obtenir la référence d'un objet en PHP est-elle redondante?

function someMethod(SomeClass& $obj) 
{ 
//... 
} 

J'ai aussi vu des choses comme ceci:

function add() 
{ 
$object = new SomeClass; 
self::$objects[] =& $object; 
} 

-moi si je me trompe, mais il n'y aurait pas de différence ici:

self::$objects[] =& new SomeClass 
self::$objects[] = new SomeClass 

ai-je raison ??????

Une autre chose que j'ai testé:

class SomeClass{} 
$obj =& new SomeClass; // is in fact deprecated, doesn't work 

$obj = new SomeClass; 
$obj2 =& $obj; // works, but should also be deprecated!! No? 
+0

Pourquoi '' & 'sur ano Cette variable peut-elle être dépréciée? – BoltClock

+0

@BoltClock: dans le cas où la variable est déjà un pointeur vers un objet. – fabio

+0

@ user532722: que se passe-t-il si ce n'est pas un objet, mais une variable de type valeur? – zerkms

Répondre

2

En php5, oui, il est redondant et inutile.

+0

Je vais rester avec votre réponse – fabio

+0

Non ce n'est pas. '&' crée une référence de variable, ce qui est assez différent d'une référence d'objet. Voir cette réponse pour une ventilation détaillée de la différence: http://stackoverflow.com/questions/3611986/in-php-can-someone-explain-cloning-vs-pointer-reference/3612129#3612129 – ircmaxell

+0

@ircmaxell: dans les cas OP nous a donné un échantillon - il n'y a pas de différence. – zerkms

0

Cette page peut vous être utile: http://www.php.net/manual/en/language.operators.assignment.php

new retourne automatiquement une référence, de sorte que vous n'utilisez pas le = & plus avec un objet nouvellement déclaré.

+0

'& ='! = '= &' ; -)' = & '(c'est ce que demande OP à propos de) est en fait 2 opérateurs' = 'et' & ' – zerkms

+0

vous avez raison, mon erreur, mais le point est toujours valide. fixé. – zsalzbank

+1

@zerkms: Je pensais que c'était aussi deux opérateurs ('$ somevar = une référence à $ someothervar'), mais selon Artefacto, il s'agit en fait d'un seul opérateur.Voir son commentaire sur [cette question] (http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php). – BoltClock

1

La seule chose liée à des références qui est dépréciée pour autant que je sais est temps d'appel passe par référence (par exemple somefunction(&$var);

Vos exemples de code ont probablement le symbole & pour la compatibilité PHP 4. Il n » Peu importe que vous utilisiez & ou que vous ne travailliez pas avec des références d'objet en PHP 5. Certes, il existe une différence légère (entre passer des références par valeur en PHP 5, et utiliser & pour passer des objets par référence), mais Dans la plupart des cas, cela ne devrait pas affecter votre code quand il est exécuté en PHP 5.