PHP 面向对象高级:接口 1 个改进

一、抽象类和接口类的异同

对比:

抽象类 接口类
类中至少有一个抽象方法,也可包含非抽象方法 类中全部为抽象方法,接口抽象方法为public,前面不用加abstract
可以使用各种成员属性 只能使用成员属性为常量const

共同点:

  • 本身不能被实例化,必须继承或者引用

  • 继承和引用后,抽象方法必须重载才能实例化

二、语法

抽象的关键字是abstract,而接口的关键字是interface

interface 接口名称{
    // 常量成员
    // 抽象方法
}

继承接口,使用implements关键字。

单继承:

class 类名 implements 接口一 {
    // 实现所有接口中的抽象方法
}

多继承:

class 类名 extends 父类名 implements 接口一, 接口二, ..., 接口 n {
    // 实现所有接口中的抽象方法
}
  • 接口中所有的方法都是抽象方法

  • 在使用 implements 关键字继承接口的同时,还可以使用 extends 关键字来继承一个类

  • 接口不能进行实例化操作,所以要使用接口中的成员,就必须借助子类。

三、代码示例

<?php
interface Demo{
    const NAME = '强子';
    function fun1();
}

interface Test{
    public function fun2();
}

class Father{
    public function eating(){
        echo '吃饭的光头强'.PHP_EOL;
    }
}

class Study extends Father implements Demo,Test {

    public function fun1(){
        echo self::NAME.PHP_EOL;
    }

    public function fun2()
    {
        echo '写代码的光头强'.PHP_EOL;
    }
}


$obj = new Study();
$obj -> fun1();//输出:强子
$obj -> fun2();//输出:写代码的光头强
$obj -> eating();//输出:吃饭的光头强
echo Demo::NAME;//输出:强子
本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!