## 声明类 class 类名{ } ### 属性 通过在类定义中使用关键字" var "来声明变量,即创建了类的属性,虽然在声明成员属性的时候可以给定初值, 但是在声明类的时候给成员属性初始值是没有必要的,比如说要是把人的姓名赋上“张三”,那么用这个类实例出几十个人,这几十个人都叫张三了,所以没有必 要, 我们在实例出对象后给成员属性初始值就可以了。 如:var $somevar; ### 方法(成员函数) 通过在类定义中声明函数,即创建了类的方法。 我们做个矩形类, 先分析一下, 想一想从两方面分析,矩形的属性都有什么? 矩形的功能都有什么? class 矩形 { //矩形的属性 矩形的长; 矩形的宽; //矩形的方法 矩形的周长; 矩形的面积; } <?php class Rect { var $kuan; var $gao; function zhouChang() { 计算矩形的周长; } function mianJi() { 计算矩形的面积; } } ?> 如果用这个类来创建出多个矩形对象,每个矩形对象都有自己的长和宽, 都可以求出自己的周长和面积了。 ## 实例化对象 使用new关键字来生成一个对象 如: $r = new Rect(); 对像在PHP里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的,在运行的时候都要加载到内存中去用。 ### 对象在内存里面是怎么体现的呢? 内存从逻辑上说大体上是分为4段, 栈空间段, 堆空间段,代码段, 初使化静态段。 程序里面不同的声明放在不同的内存段里面,栈空间段是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1, 10, 100, 1000, 10000, 100000等等,在内存里面占用空间是等长的,都是64位4个字节。 那么数据长度不定长,而且占有空间很大的数据类型的数据放在那内存的那个段里面呢? 这样的数据是放在堆内存里面的。栈内存是可以直接存取的,而堆内存是不 可以直接存取的内存。对于我们的对象来说就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通 过对象名称就可以使用对象了。 $p1 = new Person(); 对于这个条代码, $p1是对象名称在栈内存里面,new Person()是真正的对象,是在堆内存里面的,等号右边是真正的对象实例, 在堆内存里面的实体,每个对象之间都是相互独立的,使用自己的空间,在PHP里面,只要有一个new这个关键字出现就会实例化出来一个对象,在堆里面开辟一块自己的空间。 每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓名、性别和年龄。每个属性又都有一个地址。 $p1=new Person();等号的左边$p1是一个引用变量,通过赋值运算符“=”把对象的首地址赋给“$p1“这个引用变量, 所以$p1是存储对象首地址的变量,$p1放在栈内存里边,$p1相当于一个指针指向堆里面的对象, 所以我们可以通过$p1这个引用变量来操作对象, 通常我们也称对象引用为对象。