views:

113

answers:

2

I'm converting some old PHP 4.x code for PHP 5.3. I've come across the following, and I'm not sure what it does.

$variable =& new ClassName();

What is the difference between that, and:

$variable = new ClassName();
+4  A: 

In Ye Olde Days of PHP4, =& was necessary when constructing objects. In PHP 5, it's not.

=& does reference assignment.

E.G.:

$a = 'a';
$b =& $a;
$b = 'b';
echo $a; // Prints 'b', since a and b have been linked by &=.

In other words, it has its uses, just not when instantiating an object. For that use, it's been depreacted.

Tordek
+1  A: 

In PHP4, objects were passed by value by default, rather than by reference. This means that a copy of the object was made upon assignment. If you wanted to pass the object by reference instead of by value, you could use the & operator. In PHP5, objects are passed by reference by default. So the & is no longer necessary when dealing with objects. Primitives (or scalars as they are often called in the PHP world) are still passed by value by default.

I find that when migrating OO PHP4 code to PHP5, quite a lot of &s get removed.

Asaph
see http://docs.php.net/language.oop5.references
VolkerK