$p1
=
new
Person();
$p2
=
new
Person();
$p3
=
new
Person();
$p1
=
new
Person();
这条代码就是通过类产生实例对象的过程,
$p1
就是我们实例出来的对象名称,同理,
$p2
,
$p3
也是我们实例出来的对象名称,一个类可以实例出多个对象,每个对象都是独立的,
上面的代码相当于实例出来
3 个人来,每个人之间是没有联系的,只能说明他们都是人类,
每个人都有自己的姓名,性别和年龄的属性,每个人都有说话和走路的方法,只要是类里
面体现出来的成员属性和成员方法,实例化出来的对象里面就包含了这些属性和方法。
对像在
PHP 里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的,在
运行的时候都要加载到内存中去用,
那么对象在内存里面是怎么体现的呢?内存从罗辑上
说大体上是分为
4 段, 栈空间段、堆空间段、代码段、 初始化静态段,程序里面不同的声明
放在不同的内存段里面,栈空间段是存储占用相同空间长度并且占用空间小的数据类型的
地方,比如说整型
1, 10, 100, 1000, 10000, 100000 等等,在内存里面占用空间是等
长的,都是
64 位 4 个字节。 那么数据长度不定长,而且占有空间很大的数据类型的数据放
在那内存的那个段里面呢?这样的数据是放在堆内存里面的。栈内存是可以直接存取的,而
堆内存是不可以直接存取的内存。对于我们的对象来数就是一种大的数据类型而且是占用空
间不定长的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通过对
象名称就可以使用对象了。
$p1
=
new
Person(); 对于这个条代码,
$p1
是对象名称在栈内存里面,
new
Person()是真正的
对象是在堆内存里面的。
等号右边是真正的对象实例,在堆内存里面的实体。这里一共有
3 次
new
Person(),所以会
在堆里面开辟
3 个空间,产生 3 个实例对象,每个对象之间都是相互独立的,使用自己的
空间,在
PHP 里面,只要有一个
new
这个关键字出现就会实例化出来一个对象,在堆里面
开辟一块自己的空间。
每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓名、
性别和年龄。每个属性又都有一个地址。
$p1
=
new
Person();等号的右边
$p1
是一个引用变量,
通过赋值运算符
“=”把对象的首地址赋给“
$p1
”这个引用变量,所以
$p1
是存储对象首地址的
变量,
$p1
放在栈内存里边,
$p1
相当于一个指针指向堆里面的对象,所以我们可以通过
$p1
这个引用变量来操作对象
,通常我们也称对象引用为对象。