PHP对象变量,不是直接保存整个对象的值,而是保存一个标识符(object identifier),用这个标识符来指向真正的对象。
$obj1 = new A(); $obj1->name = 'Dog';
当执行对象变量的复制、作为参数传递、作为结果返回时,此时所复制、传递、返回的是“另一个”相同的标识符。而这些标识符指向同一个对象。
$obj2 = $obj1; $obj2->name = 'Cat'; echo $obj1->name; //Cat echo $obj2->name; //Cat
当执行引用时(reference),则相当于直接指向了“同一个”对象标识符。
$obj3 = new A(); $obj3->name = 'Dog'; $obj4 = &$obj3; $obj4->name='Cat'; echo $obj3->name; //Cat echo $obj4->name; //Cat
所以,其中的意义在于,必须明白对象变量的“赋值”操作实际是针对对象标识符来做的,而不是直接针对对象本身,经查java也是类似的处理机制。