第七章:第6节 PHP面向对象——PHP对象的传值

更新于:2021-05-10 14:38:11

看过上节内容,我们继续研究。我们的打印函数ln_dump()(var_dump改造版)可以打印出各种数据类型,如果用它打印下对象:


1.png

1.png


打印出来的结果:

对象的值都是类似于object(Person)#1、object(Person)#2这样的值,它们就是对象的标识符,对象变量真正存储的数据。我们可以把它理解为指向对象堆空间的指针,对象数据存在堆空间。


回顾下PHP变量传值分两种:值传递与引用传递,默认变量都是值传递。


1.png

1.png


使用“&”才能实现引用传递:


1.png

1.png


PHP对象变量默认的也是值传递,由于PHP对象变量存的是“对象标识符”,给我们的感觉它又像默认的是引用传递。


1.png

1.png


第10行代码明明只修改了$p1,怎么$p2->name也变成了“超级楠神二号”


看图理解:


1.png

对象变量:


1.png



则对象变量复制的时候,值传递就变成这样:


1.png


对象变量进行普通传值的时候,复制的是对象变量中所存储的“对象标识符”,所以才会出现类似“引用传值”的效果。


1.png

第13、14行打印两个对象变量,看看对象标识符是否一样:

1.png

都是object(Person)#1。


假如新实例化一个对象:

1.png

第17行新实例化对象$p3,赋值给$p1,那$p1的对象标识符肯定会和$p3的一样:


1.png


关于对象变量的引用传值楠神就不演示了,自己感兴趣可做测试。因为给对象变量做引用传值实际应用不常见,没必要把程序搞的那么绕。


PHP变量在内存中的表示》可以从这篇文章更深次了解PHP对象的传值问题。


本节学习代码》》》