回顾下我们所学的类:
普通的类(包括最终类)成员有:有属性、有方法、有类常量
抽象类成员多一个:有属性、有方法、有类常量、还可以有抽象方法(只有方法头)
这节我们学习一个比抽象类还要更抽象的类——接口。
接口中,只有两类最简单特性信息:
接口常量: 其实就是常量。
抽象方法: 只有方法头——下级自然就应该去“实现”它。
接口怎么定义:
interface 接口名{}
接口有什么用?
接口可以看作是抽象类的更高层面的“抽象规范”,使用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容,其实就是些抽象方法。
接口中定义的所有方法都必须是public,这是接口的特性。
接口中的方法都是抽象方法,无需声明抽象。
鸟:有翅膀,能飞;
鸵鸟是鸟吗?
一个类“继承”接口中的特性信息,被称为实现“implements”,其实本质跟继承一样,即下级类就可以使用上级类的数据(方法)了。
但因为接口中的方法都是抽象的,则下级类就必须:
1,要么实现该抽象方法(写出其方法体)
2,要么也声明为抽象方法——等待更下一级的类去实现。
接口可以实现“多继承”(多实现),而类不行。
一个类只能继承一个父类,但可以实现多个“上级接口”,语法形式:
class 类A extends 类B implements 接口1,接口2,.... { 。。。类定义语句。。。}
一个接口同样可以继承多个“上级接口”,语法形式:
interface 接口1 extends 接口2,接口3 {接口定义}
想多了解接口的可去看手册,里面有几个示例方便理解。
接口,普通类,抽象类,普通方法,抽象方法,各种常量的总结(图):
总结:
对于初学PHP的朋友,实际开发中多是定义普通类,很少用到最终类、抽象类、接口。随着开发经验丰富,开发中使用更多设计模式,就知道每一种类都有它的用处。
像适配器模式中,就很【需要接口去规范】 【不同的驱动子类完成同样的功能都需要实现哪些方法】。没有接口规范,不同的驱动子类定义的方法会不统一,凌乱,程序整体灵活性就差。B程序员接手A程序员的程序就很难下手,不清楚怎么改。
类的多样化,在一些开发难度大,需要多人协同合作,开发规范要求高的编程语言里更有用,更能起到规范作用。