面向对象(通俗易懂)

类是抽象的,是泛指,是某一类事物的统称 对象是具体的,是特指,是某一个具体事物的“特称” Dog就是类,$d1就是对象。$d1是通过Dog

类是抽象的,是泛指,是某一类事物的统称

 

对象是具体的,是特指,是某一个具体事物的“特称”

 

 

 

 

Dog就是类,$d1就是对象。$d1是通过Dognew”出来的(一个类通过new就可以得到一个对象)。

 

其中,类的名称Dog不区分大小写,但$d1作为变量,是区分大小的!

 

提示:

 

每个对象都会由系统给其分配一个“对象编号”,该对象编号在当前运行的程序中是唯一的不重复的。

 

类的继承

 

子类:

继承过程中,新的那个类,就是子类。也有其他一些类似称呼:派生类,下层类。

 

父类:

继承过程中,原有那个类,就是父类。也有其他一些类似称呼:基类,上层类,超类。

 

扩展:

子类继承了父类之后,再在自己的内部定义一些自己的成员信息的过程,就是扩展。

扩展,是继承的“自然目的”,即,继承,是为了进行适当的扩展。

如果继承了而不扩展,继承是没有意义的(子类跟父类一样,甚至有时候会更少功能)。

 

访问控制修饰符

出于安全和权限控制的需要,可以对一个类的成员的“可访问性”(可操作性)进行不同层级的控制。

PHP中,有3种不同层级的访问控制:

public(公共的)

表示该成员“哪里都可以访问”。之前的var其实就是public的同名词。

方法前没有加访问控制修饰符时,默认就是public

 

protected(受保护的)

表示该成员“只在自己内部或跟自己有继承关系的类内部可以访问”。

 

private(私有的)

表示该成员“只有自己可以访问”,即只能在该类的内部访问该成员。

 

 

重写(覆盖)override

 

基本含义:

重写就是指,在子类内部,对父类的同名成员,进行“重新定义”。

重写又叫“覆盖”,单词为“override

 

为什么需要重写:

 

重写是由于子类继承父类后,“觉得”父类所给出的一些成员不能完全符合子类的需要,但又想要用到跟父类中同名的成员名,因此就在子类中重新定义该成员。

重写的基本要求:

重写时,子类成员的访问控制范围不能更小;

父类中成员是public,子类只能是public

父类中成员是protected, 子类同名成员可以是publicprotected

父类中成员是private,子类并不能覆盖它!——会继承下来,但也不能用!

 

方法重写时,子类方法的形参需要跟父类保持一致,但构造方法的形参不受此限制

构造方法和析构方法的重写特征

1当子类没有自己的构造方法的时候(自然会继承父类的构造方法),则实例化子类的时候,会自动调用父类的构造方法。

2,构造方法重写时的参数要求,不受限制!

3,析构方法类似:子类没有,就会自动调用父类的,否则就不会调用父类的。

 

 

 

abstract:抽象类和抽象方法

 抽象类:

基本含义:

表示这个类“不能实例化对象”。

定义形式:

abstract  class  类名 { 。。。。类成员。。。}

应用目的:

某人定义了一个类,并且希望(实际是要求)别人去继承这个类并实现具体的功能。

抽象方法:

基本含义:

表示这个方法是“不能执行的”,其实根本就是一个“空方法”,没有方法体。

定义形式:

abstract  function  方法名(形参列表...

应用目的:

某人定义了一个方法,并且希望(实际是要求)别人去继承这个类并实现具体的功能。

特别注意:

抽象方法其实只是定义了一个方法的“形式”,而完全没有方法的具体代码(方法体)。该形式的本质含义其实就是“要求”别人(下级类的定义者)要按这个抽象类的形式定义具体的方法(也就是所谓实现该方法)。因此,一个类如果继承了一个抽象类,则在语法要求上做到:

1,要么这个子类全部实现上级抽象类中的所有抽象方法。

2,要么这个子类本身也是抽象类——此时可以去实现或不实现上级的全部或部分抽象方法。

3,下级类实现上级类的抽象方法,本质其实就是覆盖

 

抽象类与抽象方法的关系:

 

1,抽象方法必须在抽象类中——即定义一个抽象方法,则必然会定义一个抽象类。

 

2,抽象类中可以没有抽象方法——但并不常见。

 

3,抽象类的目的是“供其他类继承”,抽象方法的目的是“供子类覆盖”。

 

 

关键字:

class,  new, $this, self, parent, static,  __construct,  __destruct,  extends,  public, protected  private,  final,  abstract

非关键字(但常见常用):

property属性, method方法, override重写(覆盖), declare(声明/定义), implements(实现)

 

 

接口interface

基本含义:

接口是一种比抽象类更抽象的特殊类——只是被称为接口。

它具有这样的特征:

接口中只可以有两种成员:常量(即接口常量),以及抽象方法

 为什么需要接口

接口是实现“多继承”的一种折中方案。

因为PHP中,类之间的关系只能是单继承,即一个类只能继承一个上级类的特征信息。

但如果一个类想要多个上级类的特征信息的时候,就可以做成“接口”,让类去“继承”多个接口。

一个类可以“继承”多个接口,也就具有了多个接口中具有的特征信息。

一个类继承接口,就不叫继承了,而是被称为“实现”——本质其实就是继承。

举例:

音乐播放器:开始,暂停,停止,下一首,上一首,

USB存储器:宽,高,输出,存入

MP3播放器:它具有上述两个设备的功能!

 

 

接口的实现implements

基本含义:

一个类继承一个(或多个)接