接口本身并不提供实现,只是提供一个规范。如果我们知道一个类实现了某个接口,那么就知道了可以调用该接口的哪些方法,我们只需要知道这些就够了。
PHP中,接口的语义是有限的,使用接口的地方并不多,PHP中接口可以淡化为设计文档,起到一个团队基本契约的作用。
接口就是这样,接口本身什么也不做,系统悄悄地在内部实现了接口的行为,所以只要实现这个接口,就可以使用接口提供的方法。这就是接口“即插即用”思想。我们都知道,接口是对多重继承的一种变相实现,而在讲继承时,我们提到了用来实现混入(Mixin)式的Traits,实际上,Traits可以被视为一种加强型的接口。
总结关于接口的几个概念:
接口作为一种规范和契约存在。作为规范,接口应该保证可用性;作为契约,接口应该保证可控性。
接口只是一个声明,一旦使用interface关键字,就应该实现它。可以由程序员实现(外部接口),也可以由系统实现(内部接口)。接口本身什么都不做,但是它可以告诉我们它能做什么。
PHP中的接口存在两个不足,一是没有契约限制,二是缺少足够多的内部接口。
接口其实很简单,但是接口的各种应用很灵活,设计模式中也有很大一部分是围绕接口展开的。