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

Dog就是类,$d1就是对象。$d1是通过Dog“new”出来的(一个类通过new就可以得到一个对象)。
其中,类的名称Dog不区分大小写,但$d1作为变量,是区分大小的!
提示:
每个对象都会由系统给其分配一个“对象编号”,该对象编号在当前运行的程序中是唯一的不重复的。
类的继承
子类:
继承过程中,新的那个类,就是子类。也有其他一些类似称呼:派生类,下层类。
父类:
继承过程中,原有那个类,就是父类。也有其他一些类似称呼:基类,上层类,超类。
扩展:
子类继承了父类之后,再在自己的内部定义一些自己的成员信息的过程,就是扩展。
扩展,是继承的“自然目的”,即,继承,是为了进行适当的扩展。
如果继承了而不扩展,继承是没有意义的(子类跟父类一样,甚至有时候会更少功能)。
访问控制修饰符
出于安全和权限控制的需要,可以对一个类的成员的“可访问性”(可操作性)进行不同层级的控制。
PHP中,有3种不同层级的访问控制:
public(公共的):
表示该成员“哪里都可以访问”。之前的var其实就是public的同名词。
方法前没有加访问控制修饰符时,默认就是public
protected(受保护的):
表示该成员“只在自己内部或跟自己有继承关系的类内部可以访问”。
private(私有的):
表示该成员“只有自己可以访问”,即只能在该类的内部访问该成员。
重写(覆盖)override
基本含义:
重写就是指,在子类内部,对父类的同名成员,进行“重新定义”。
重写又叫“覆盖”,单词为“override”
为什么需要重写:
重写是由于子类继承父类后,“觉得”父类所给出的一些成员不能完全符合子类的需要,但又想要用到跟父类中同名的成员名,因此就在子类中重新定义该成员。
重写的基本要求:
重写时,子类成员的访问控制范围不能更小;
父类中成员是public,子类只能是public
父类中成员是protected, 子类同名成员可以是public和protected
父类中成员是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
基本含义:
一个类继承一个(或多个)接