2.5PHP类型之接口(Interface)

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

(0)
上一篇 2023年7月4日
下一篇 2023年7月6日

相关推荐

  • 1.3PHP语言的标识符(Identifier)

    1.标识符 标识符必须以字母(A~Z 和 a~z)或 下划线(_) 开头,后续可以是任何字母(A~Z 和 a~z)、数字(0~9)或 下划线(_)。除了函数名外,标识符都区分大小写。 2.命名约定

    PHP语言教程 2023年6月3日
    0170
  • 2.10PHP语言的特性(Attribute)类

    1.特性(Attribute)类声明 声明一个特性类,首先从全局命名空间 use 导入 #[Attribute] 特性,然后在普通类声明上添加 #[Attribute] 特性以表示此类为特性类。 特性目标 描述 Attribute::TARGET_ALL 不限制用于具体哪一个。 Attribute::TARGET_CL…

    PHP语言教程 2023年7月10日
    0210
  • 1.9PHP语言的表达式(Expression)

    在 PHP 语言中,几乎所写的任何东西都是表达式。 1.declare语言结构 declare 语言结构用来为一段代码块设定执行指令(directive)。 目前只支持三个指令(directive):ticks 指令、encoding 指令、strict_types 指令。 代码块中的语句…

    PHP语言教程 2023年6月9日
    0190

发表回复

登录后才能评论