咱们上面说过面向对象程序的单位就是对象,但对象又是经过类的实例化出来的,既然咱们类会声明了,下一步就是实例化对象了。php
当定义好类后,咱们使用new关键字来生成一个对象。spa
$对象名称 = new 类名称();指针
<?php class Person { // 下面是人的成员属性 var $name; // 人的名字 var $sex; // 人的性别 var $age; // 人的年龄 // 下面是人的成员方法 function say() { // 这我的能够说话的方法 echo "这我的在说话"; } function run() { //这我的能够走路的方法 echo "这我的在走路"; } } $p1 = new Person(); $p2 = new Person(); $p3 = new Person(); ?>
$p1 = new Person();对象
这条代码就是经过类产生实例对象的过程,$p1就是咱们实例出来的对象名称, 同理,$p2, $p3也是咱们实例出来的对象名称,一个类能够实例出多个对象,每一个对象都是独立的,上面的代码至关于实例出来3我的来, 每一个人之间是没有联系的, 只能说明他们都是人类, 每一个人都有本身的姓名, 性别和年龄的属性,每一个人都有说话和走路的方法,只要是类里面体现出来的成员属性和成员方法,实例化出来的对象里面就包含了这些属性和方法。blog
对像在PHP里面和整型、浮点型同样,也是一种数据类,都是存储不一样类型数据用的,在运行的时候都要加载到内存中去用, 那么对象在内存里面是怎么体现的呢?内存从罗辑上说大致上是分为4段, 栈空间段, 堆空间段,代码段, 初使化静态段, 程序里面不一样的声明放在不一样的内存段里面,栈空间段是存储占用相同空间长度而且占用空间小的数据类型的地方,好比说整型1, 10, 100, 1000, 10000, 100000等等,在内存里面占用空间是等长的,都是64位4个字节。 那么数据长度不定长,并且占有空间很大的数据类型的数据放在那内存的那个段里面呢?这样的数据是放在堆内存里面的。栈内存是能够直接存取的,而堆内存是不 能够直接存取的内存。对于咱们的对象来讲就是一种大的数据类型并且是占用空间不定长的类型,因此说对象是放在堆里面的,但对象名称是放在栈里面的,这样通 过对象名称就可使用对象了。内存
$p1 = new Person();io
对于这个条代码, $p1是对象名称在栈内存里面,new Person()是真正的对象是在堆内存里面的,具体的请看下图:function
从上图能够看出 $p1 = new Person();等号右边是真正的对象实例, 在堆内存里面的实体,上图一共有3次new Person(),因此会在堆里面开辟3个空间,产生3个实例对象,每一个对象之间都是相互独立的,使用本身的空间,在PHP里面,只要有一个new这个关键字出现就会实例化出来一个对象,在堆里面开辟一块本身的空间。class
每一个在堆里面的实例对象是存储属性的,好比说,如今堆里面的实例对象里面都存有姓名、性别和年龄。每一个属性又都有一个地址。变量
$p1 = new Person();等号的左边$p1是一个引用变量,经过赋值运算符“=”把对象的首地址赋给“$p1“这个引用变量, 因此$p1是存储对象首地址的变量,$p1放在栈内存里边,$p1至关于一个指针指向堆里面的对象, 因此咱们能够经过$p1这个引用变量来操做对象, 一般咱们也称对象引用为对象。