面向对象 简单介绍
1、什么是面向对象?
面向对象编程是一种计算机编程架构,oop的一条基本原则是计算机程序是由单个能够起到子程序运用的单元或对象组合而成,oop达到了软件工程的三个目标:重用性,灵活性和扩展性。
2、类和对象的关系
类与对象的关系就如模具和铸件的关系,类的实例化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。
举例说明,类和对象的关系,就好比你去中关村买pc(电脑),你要买的是组装pc的零件。你有一个配置单,你要买的所有的零件都在这个配置单上面。然而这个配置单你就可以把它看做是一个类,你按照配置单上面的零件组装成的电脑就是对象,你按照配置单组装十台电脑那么就有是个对象,你对其中一台电脑做出改变,配置单是不会变的,如果你对配置单做出改变那么十台电脑都会改变,这就是类和对象的关系(类的实例化结果就是对象)。
3、类的概念
类是具有相同属性和服务的一组对象的集合。
4、对象的概念
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。
5、什么是面向对象编程?
你把每个独立的功能模块抽象成类,形成对象,有多个对象组成这个系统,这些对象之间能够接收信息,处理数据和向其它对象发送信息等等相互作用。就构成了面向对象的程序。注:面向对象程序的单位就是对象。
6、如何抽象一个类?如何实例化一个对象?如何使用对象中的成员?
1、
class 类名{ //使用关键字class 后面加上你想要的类名 以及加上一对大括号,这样一个类的结构就定义出来了
}
2、
$db = new 类名; //使用new关键字来生成一个对象。一个类可以实例化多个对象,每个对象都是独立的。每个对象那个都包含了类的属性和方法。
3、
在对象的外部去访问对象中成员的形式
要想访问对象中的成员就要使用一个特殊操作符“->”来完成对象成员的访问。
访问对象属性 : $db->属性();
访问对象方法 : $db->方法();
在对象的内部去访问对象中成员的形式
访问对象属性:$this->属性();
访问对象方法:$this->方法();
7、 构造函数
1、构造函数可以接受参数,能够在创建对象时赋值给对象属性。2、构造函数可以调用类方法或其他函数。3、构造函数可以调用其他类的构造函数。
function __construct(){
parent::__construct();//调用父类的构造函数;
classname::__construct();//调用其他类的构造函数 classname是类名
}
析构函数
1、析构函数是在销毁对象时,自动调用,不能显示的调用。2、析构函数不能带参数。
当对象被unset();销毁时调用析构函数。
8、封装性
1、封装性是面向对象的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能的隐蔽对象的内部细节,包含两个含义:1、把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象);2、信息隐蔽,尽可能的隐藏对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生联系。
封装的原则
要求使对象以外的部分不能随便存取对象的内部数据(属性),从而有效的避免了外部错误对对象的”交叉感染“,使错误局部化,减少查错和排错的难度。
9、__set( ), __get( ), __isset( ), __unset( ) 四个方法的应用
1、__set()函数:自动执行,为类的私有属性进行赋值。有两个参数(属性名称,给属性赋值);
2、__get()函数:自动执行,在类的外部获取类的私有属性,有一个参数(属性名称);
3、__isset()函数:判断类中的变量是否存在,存在返回true,否则返回false,如果类中的变量是私有的要在类加上一个__isset()方法,自动执行。
4、__unset()函数:删除类中的变量,如果类中的变量是私有的要在类中加上一个__unset()方法,自动执行。
10、类的继承
继承是面向对象的三个重要特性的一个方面,他是至建立一个新的派生类,从一个或多个先前定义的类中继承数据核函数。
在php和Java语言里面没有多继承,只有单继承,也就是说,一个类只能直接从一个类中继承数据,这就是单继承。
11、在子类中覆盖父类中的方法。
把要覆盖的父类的方法原有的功能再加上一点自己的功能,可以通过两种方法实现在子类中调用父类被覆盖的方法
1、“类名::方法名()”调用父类中被覆盖的方法
2、“parent::方法名()”调用父类中被覆盖的方法
这两种方法都可以实现,但是不要用类名而是应该用parent,parent指的就是子类在extends声明中的父类,这样就可以避免在多个地方使用父类的名字,还有就在实现的过程中如果要修改,只要修改extends声明的部分。
注意:子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。
12、访问类型(public(共有的、默认)、protected(受保护的)、private(私有的))三种
1、public 公有修饰符 类中的成员、属性、方法、访问没有限制,所有的外部成员都可以访问。
2、protected 受保护修饰符 被修饰的类,类中的成员、属性、方法不能被该类外部的代码访问。但是对于该子类有访问权限。
3、private 私有修饰符 被定义的成员,对于同一个类的所有成员是可以访问的,外部是没有访问权限的,对于该子类也不能访 问被定义private的成员。
13、final关键字的应用
final关键字只能用来定义定义类和定义方法,不能使用final来定义成员属性,因为final是常量的意,我们在php5中定义常量使用的是define()函数,所以不使final定义成员属性。被final定义的类不能被继承,被final定义的方法不能被子类覆盖。
14、static和const关键字的使用(self::)
static成员能够限制外部的访问,static的成员是属于类的,不属于任何对象的实例。
静态成员被这个类的每个实例对象所共享,使用对象访问不到静态成员
类里面的静态方法只能访问类的静态的属性,静态的方法是不能用对象调用的,而是使用类名来访问
在静态方法中访问其他静态成员我们使用的是一个特殊的类“self”代表这个静态方法所在的类 即:self::成员属性
const是一个定义常量的关键字 访问方法 类名::属性 self::属性 注: 不加$符号
15、__toString的应用
在类中定义__tostring()方法可以直接输出对象。
16、__call的使用
处理调用错误
17、抽象类和抽象方法
1、抽象方法
在类里面定义的没有方法体的方法就是抽象方法,所谓的没有方法体指的是,在方法声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字“abstract”来修饰
例如::abstract function fun1();
2、抽象类
只要一个类里面有一个方法是抽象方法,那么这个类就要定义为抽象类,抽象类也要使用“abstract”关键字来修饰;在抽象类里面可以有不是抽象的方法和成员属性,但只要有一个方法是抽象的方法,这个类就必须声明为抽象类,使用”abstract”来修饰