background image

$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

这个引用变量来操作对象

,通常我们也称对象引用为对象。