php中接口interface

使用接口(interface),`可以指定某个类必须实现哪些方法`,但不需要定义这些方法的具体内容。 由于接口(interface)和类(class)、trait 共享了命名空间,所以它们不能重名。

`接口`就像定义一个`标准的类`一样,通过 interface 关键字替换掉 class 关键字来定义,但其中所有的方法都是空的。

`接口中定义的所有方法都必须是 public `,这是接口的特性。

在实践中,往往出于两个辅助目的使用接口:

因为实现了同一个接口,所以开发者创建的对象虽然源自不同的类,但可能可以交换使用。 常用于多个数据库的服务访问、多个支付网关、不同的缓存策略等。 可能不需要任何代码修改,就能切换不同的实现方式。
能够让函数与方法接受一个符合接口的参数,而不需要关心对象如何做、如何实现。 这些接口常常命名成类似 Iterable、Cacheable、Renderable, 以便于体现出功能的含义。
接口可以定义魔术方法,以便要求类(class)实现这些方法。

注意:

虽然没有禁止,但是强烈建议不要在接口中使用 构造器。 因为这样在对象实现接口时,会大幅降低灵活性。 此外,也不能强制确保构造器遵守继承规则,将导致不可预料的行为结果。

实现(implements)
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。 类可以实现多个接口,用逗号来分隔多个接口的名称。

警告
类实现(implement)两个接口时,如果它们定义了相同名称的方法,只有签名相同的时候才是允许的。

警告
实现接口的时候,class 中的参数名称不必和接口完全一致。 然而, PHP 8.0 起语法开始支持命名参数, 也就是说调用方会依赖接口中参数的名称。 因此,强烈建议开发者的参数的命名,在类和接口中保持一致。

注意:

接口也可以通过 extends 操作符扩展。

注意:

类实现接口时,必须以兼容的签名定义接口中所有方法。

常量
接口中也可以定义常量。接口常量和类常量的使用完全相同, 在 PHP 8.1.0 之前 不能被子类或子接口所覆盖。

    A+
发布日期:2022年03月08日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: