1.接口声明
interface 接口名 {
//接口体
}
接口体中可以包含静态方法、实例方法、构造函数(不推荐)、析构函数(不推荐)、魔术方法、类常量。
接口中的所有方法只可以定义方法签名,不可以定义方法的具体实现。
接口可以继承,但不可以实例化。
注意:接口中的所有方法与抽象方法的语法不同,接口中的所有方法不可以添加 abstract
关键字。
注意:接口中的所有方法的可见性修饰符必须为 public
或 不添加任何可见性修饰符。
注意:接口中的方法声明末尾无一对花括号 {}
,必须以分号 ;
结尾。
2.接口继承
interface 子接口名 extends 父接口名1[, 父接口名2, 父接口名N] {
//子接口体
}
3.实现接口
class 类名 implements 接口名1[, 接口名2, 接口名N] {
//类体
}
//同时继承和实现
//当同时出现extends关键字和implements关键字的时候,extends关键字必须在前面。
class 子类 extends 父类 implements 接口 {
//子类体
}
接口可以被抽象类和具体类实现。
如果是抽象类直接实现接口,则抽象类只能实现接口的一部分方法,继承这个抽象类的具体类必须实现剩余的方法。
如果是具体类直接实现接口,则具体类必须实现接口中定义的所有方法。
//抽象类直接实现接口
interface A
{
public function foo(string $s): string;
public function bar(int $i): int;
}
abstract class B implements A
{
public function foo(string $s): string
{
return $s . PHP_EOL;
}
}
class C extends B
{
public function bar(int $i): int
{
return $i * 2;
}
}
4.访问接口中的成员
访问接口中的方法,因为方法没有实现,所以必须通过实现了接口的类访问。
访问接口中的常量,可以通过接口直接访问,也可以通过实现了接口的类访问。
interface A
{
const B = 'Interface constant';
}
echo A::B;
//输出
Interface constant
class B implements A
{
//此处不仅仅实现了接口中的常量,还覆盖了接口中的常量。
const B = 'Class constant';
}
echo B::B;
//输出
Class constant
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/28893.html