PHP:通过引用实例化类?

时间:2009-12-10 05:08:52

标签: php class reference instantiation

我正在为PHP 5.3转换一些旧的PHP 4.x代码。我遇到过以下情况,我不确定它是做什么的。

$variable =& new ClassName();

有什么区别,和:

$variable = new ClassName();

2 个答案:

答案 0 :(得分:6)

在PHP4的Ye Olde Days中,=&在构造物体时是必要的。在PHP 5中,它不是。

=&确实引用了作业。

E.G:

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

换句话说,它有其用途,而不是在实例化对象时。对于这种用途,它已经被贬低了。

答案 1 :(得分:3)

在PHP4中,默认情况下,对象是按值传递的,而不是通过引用传递的。这意味着该对象的副本是在分配时进行的。如果要通过引用而不是按值传递对象,可以使用&运算符。在PHP5中,默认情况下通过引用传递对象。因此在处理对象时不再需要&。默认情况下,基元(或在PHP世界中经常调用的标量)仍按值传递。

我发现在将OO PHP4代码迁移到PHP5时,很多&被删除了。