采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
如果说对象赋值默认是引用,那么显示的加上&后,将对象置为null,显式引用赋值得到的变量也为null,但一般赋值得到的变量还是原来的值,那么对象赋值默认返回的引用和显示的引用不是同一个东西?
对象无论是否使用&,都会有同样的效果,你前面描述的可否使用代码在跟我说一下
非常感谢!
$instance=new testClass; $assign=$instance; $reference=&$instance; $instance=null; var_dump($assign);//object(testClass) var_dump($reference);//null
如果是同样的效果为什么会有这个不同
是这样,对象是存储在堆当中,而引用对象的变量是存储在栈当中,这样就不难理解,$instance = new testClass; 生成一个栈地址,存储$instance的地址,例如为0x00001,又生成一个堆空间存储对象,这个栈指向这个堆,当$assign = $instance时,首先生成新的栈空间存储$assign的地址,例如 0x000002,同时指向上述对象的堆空间,因为对象是引用赋值,当我们采用 $reference = &$instance时,是将$instance的栈地址引用给了 $reference,并不是对象的堆空间,因此,当对$instance设置为null时,其栈空间变成了null,也就是取消了对对象堆空间的引用,而此时$reference也是引用$instance的栈地址,因此也变成了null,同样取消了对对象堆空间的引用,而$assign始终没有发生改变,因此导致以上结果!
登录后可查看更多问答,登录/注册
全面、系统剖析PHP面试,拿下心仪Offer
1.2k 11
932 10
909 8
814 8
1.3k 7