PHP在使用对象分配时是否总是复制?

时间:2014-07-23 14:01:19

标签: php object reference

例如,我有以下课程。

class A {
  public $foo = 1;
}  

$a = new A;
$b = $a; // a copy of the same identifier (NB)

根据current PHP docs标识符的副本,是否一直如此?如果不是,它何时改变?

1 个答案:

答案 0 :(得分:7)

事情并非如此。在PHP4中,在分配给新变量时复制了一个对象。当PHP5被引入时,这改变为传递被分配对象的引用。

From the manual

  

在PHP 5中有一个新的对象模型。 PHP对对象的处理已被完全重写,从而实现更好的性能和更多功能。在以前的PHP版本中,对象的处理方式与原始类型(例如整数和字符串)相同。这种方法的缺点是语义上整个对象在分配变量时被复制,或者作为参数传递给方法。在新方法中,对象由句柄引用,而不是通过值引用(可以将句柄视为对象的标识符)。