PHP中接口interface的作用
对象接口
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。由于接口(interface)和类(class)、trait 共享了命名空间,所以它们不能重名。
接口就像定义一个标准的类一样,通过 interface 关键字替换掉 class 关键字来定义,但其中所有的方法都是空的。
接口中定义的所有方法都必须是 public ,这是接口的特性。
在实践中,往往出于两个辅助目的使用接口:
•因为实现了同一个接口,所以开发者创建的对象虽然源自不同的类,但可能可以交换使用。常用于多个数据库的服务访问、多个支付网关、不同的缓存策略等。可能不需要任何代码修改,就能切换不同的实现方式。
•能够让函数与方法接受一个符合接口的参数,而不需要关心对象如何做、如何实现。这些接口常常命名成类似 Iterable、Cacheable、Renderable,以便于体现出功能的含义。
接口可以定义魔术方法,以便要求类(class)实现这些方法。
实现(implements)
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
Warning 类实现(implement)两个接口时,如果它们定义了相同名称的方法,只有签名相同的时候才是允许的。
Warning 实现接口的时候,class 中的参数名称不必和接口完全一致。然而, PHP 8.0 起语法开始支持命名参数,也就是说调用方会依赖接口中参数的名称。因此,强烈建议开发者的参数的命名,在类和接口中保持一致。
Note: 接口也可以通过 extends 操作符扩展。
Note: 类实现接口时,必须以兼容的签名定义接口中所有方法。
常量 接口中也可以定义常量。接口常量和类常量的使用完全相同, 在 PHP 8.1.0 之前不能被子类或子接口所覆盖。