面向对像程序设计是一种计算机编程架构,oop的一条基本原则:计算机程序是由单个能够起到子程序作用的单元或对像组合而成的,为了实现整体运算,每个对像都能接收信息、处理数据和向共它对象发送信息。


1、 类和对像的关系

类是面向对像的编程语言中,类是一个独立的程序单元,是具有相同属性和服务的一组对像集合。

对像是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,一个对像由一组属性和有权对这些属性进行操作的一组服务的封装体。

2、 如何抽象一个类

2.1 类的声明

类的声明非常简单,和函数的声明类似。只需要使用一个关键字class后面加一个自定义的类名称,并加上一个花括号就可以了。如:

【一些修饰类的关键字】 class className{

成员属性(方法)

}

2.2 成员属性

在类中直接声明变量就称为成员属性,可以在类中声明多个变量,即对象中有多个成员属性,每个变量都存储对象不同的属性信息。如:

class demo{

var $name;

var $age;

}

2.3 成员方法

在类中直接声明的函数就称为成员方法,只不过可以加一些关键字的修饰来控制成员方法的一些权限。如private public static;声明

成员方法必须和对象相关,不能没有意义的操作。如下:

class demo{

public function say(){

//方法体

}

}

3、通过类实例化对象

3.1、实例化对象

用关键字new,格式如:$c = new demo(里面可以有参数);可以不要括号,$c = new demo;
3.2、对象类型在内存中的分配

把内存分为四个块:

栈空间段    空间小,访问速度快,存放实例化类后的对象的地址

堆空间段     存放对象的中数据,如数组,字符串等

数据段    存放可执行文件中已初始化全局部量。

代码段    存放可执行文件的操作指令。

3.3、对象中成员的访问

在类外的访问方法:$引用名 =  new 类名称(参数)

$引用名->成员属性或成员方法

在类的内部访问方法:$this->属性 或 $this->方法();

3.5、构造方法__construct和析构方法__destruct

构造方法是对象创建完成后第一个被对象自动调用的方法,这是我们在对象中使用构造方法的原因。

析构方法是对象在销毁之前最后一个被自动调用的方法,这也是我们在对象中使用析构方法的原因。

4、封装性

首先说一下什么是封装性,把对象的全部成员属性和方法结合在一起,形成一个不可分割的独立单位;信息隐蔽,即尽可能隐藏对像的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系。

4.1、设置私有成员

在成员属性前面加上private,就将成员属性设置成为了私有,这样就不能直接被使用。

4.2、私有成员的访问

如果要访问私有成员属性可以有通过公用方法进行访问和更改值,或者通过构造函数进行属性的初始化值。

4.3、__set __get  __isset __unset四个魔术方法

5、继承性

5.1、类继承有应用

5.2、访问类型控制

private protected public(默认)
同一个类中 可以 可以 可以
类的子类中 可以 可以
所有外部成员 可以

5.3、子类中重载父类的方法

第一种:完全重载,在子类中直接重写父类中的方法。

第二种:部份重载,在子类方法中用 parent::demo();

6、常见的关键字和魔术方法

6.1、final关键字的应用

使用final标识的类,不能被继承

在类中使用final标识的成员方法,在子类中不能被覆盖

6.2、static关键字的使用

static关键字可以将类中的成员标识为静态的,即可以用来标识成员属性,也可以用来标识成员方法。

类中的静态成员不需要对象而使用类名直接访问,如:类名::静态成员属性或静态成员方法。

6.3、单态设计模式

单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在。

6.4、const关键字

在类中定义常量

6.5、instanceof关键字

确定一个对象是类的实例,类的子类,还是实现了某个特定接口,并进行相应的操作。

6.6、克隆对象

使用clone对对象进行克隆。

6.7、类中通用的方法__toString()

快速获取对象的字符串表示的最便捷方式,它是在直接输出对象引用时自动调用的方法。

6.8、__call方法

调用对象中不存在的方法时就会自动调用该方法,并且程序可以继续向下执行。该方法有两个参数,第一个参是调用不存在的方法时,接收这个方法名称字符串;第二个参数是以数组的形式接收方法中的参数值。

6.9、__autoLoad()自动加载类

实例华类时自动加载方法,在该方法中可以去加别的类。

6.10、对象串行化

serialize()串行化一个对象,把对象转换为二进制的字符串。

unserialize()反串行化一个对象。

7、抽象类与接口

7.1、抽象类

抽象类就是abstract来进行修饰的类。只要声明类时一个方法是抽象方法,那么这个类就是抽象类。抽象类也要使用abstract关键字来修饰。在抽象类中可以有不是抽象类的成员方法和成员属性。但访问权限不能使用private关键字来修饰为私有的。

7.2、接口技术

接口格式:

interface 接口名称{

//常量成量

//抽象方法

}

接口的继承:

class 类名 implements 接口一,接口2,接口N{}

class 类名 extends 父类名 implements 接口一,接口2,接口N{}

8、多态性的应用