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

use*_*597 0 php reference object

例如,我有以下课程.

class A {
  public $foo = 1;
}  

$a = new A;
$b = $a; // a copy of the same identifier (NB)
Run Code Online (Sandbox Code Playgroud)

根据当前的PHP文档,制作了一个标识符的副本,这种情况一直如此吗?如果不是,它什么时候改变了?

Joh*_*nde 7

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

(来自手册)

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

  • 在更人性化的语言中,$ b是$ a的别名 (2认同)