情景一:
当对象1被赋值给赋值给对象2的时候,其实是对象标识符的传递。
每执行一条代码就把代码区的代码加载到栈区来执行。
1、所有代码必须加载到内存才能执行
2、当我们把一个对象赋给另外一个变量时,也是值拷贝,但是拷贝的不是数据本身,而是对象标识符。
情景二:
$p2 = &$p1; 相当于p2和p1指向了相同的对象描述符。这个时候如果unset($p1),则只是销毁了$p1对#1的指向,销毁了$p1,而不会销毁#1,所以$p2对象还是有的。$p1和$p2存放的是#1这个对象标识符的内存地址。而当使用$p2 = 'abc'的话,则是把$p2指向的那段内存空间的内容#2给改了,所以这个时候输出$p1->name,是会报错的。$p2 = null和$p2 = 'abc'效果是一样的。
<?php class Person{ public $name; } $p1 = new Person; $p1->name = 'aa'; $p2 = &$p1; //$p2 = 'abc'; unset($p2); echo $p1->name; ?>
注意以上两段代码的区别。
加载类里面的方法到栈区