PHP中关于对象的传递和引用(学习笔记)

 

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也是类似的处理机制。

点赞