PHP 的接口、抽象类定义和区别

PHP中的接口

PHP不支持多重继承,每个类只能继承一个父类。
接口的思想是指定了一个实现了该接口的类必须实现的一系列方法,相当于告诉别人我有那些设置好的插口,必须按我的规格来。

语法 :

interface 接口名{ ... }

规范:

  • 接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。
  • 在接口中的抽象方法只能是 public的,默认也是public权限。
  • abstract和final修饰符也不能修饰接口中的抽象方法。
  • 接口不能有 属性 普通方法 可以有常量
interface InterfaceDemo
{
    public function hello();

    //不能再定义普通的方法//这里会报错
    public function hello2(){
        //报错的,不能这些写
    }
}
class Room implements InterfaceDemo
{

    public function hello()
    {
        // TODO: Implement hello() method.
    }

    public function hello2()
    {
        // TODO: Implement hello2() method.
    }
}

接入的接口,必须全部继承接口的方法。

PHP中的抽象类

  • 定义一些方法,子类必须完全实现这个抽象中所有的方法
  • 不能从抽象类创建对象,它的意义在于被扩展
  • .抽象类通常具有抽象方法,方法中没有大括号
  • 在子类实现抽象类的方法时,其子类的可见性必须 大于或等于抽象方法 的定义
  • 如果抽象方法有参数,那么子类的实现也必须有相同的参数个数
  • 某个类只要至少含有一个抽象方法,就必须声明为抽象类
  • 继承抽象类的子类,如果不实现所有抽象方法,那么该子类 也为抽象类
  • 可以有构造方法

语法

abstract class ClassName{
    abstract function FunctionName();
}
abstract class DemoAbstract
{
    public function hello(){
        echo 2343;//抽象类,还可以定义普通的方法
    }

    //只有方法头,没有方法内容
    abstract function hello2();

}
class Room2 extends DemoAbstract
{

    function hello2()
    {
        // TODO: Implement hello2() method.
    }
}

只需要完全基础抽血方法,其他普通方法,可不需要

区别与共同点

相同点:

  • 都是用于声明某一种事物,规范名称、参数,形成模块,未有详细的实现细节!
  • 都是通过类来实现相关的细节工作
  • 语法上,抽象类的抽象方法与接口一样,不能有方法体,即{}符号
  • 都可以用继承,接口可以继承接口形成新的接口,抽象类可以继承抽象类从而形成新的抽象类

区别:

  • 抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法、可以有常量
  • 抽象类内未必有抽象方法,但接口内一定会有“抽象”方法
  • 语法上有不同
    • 抽象类用abstract关键字在类前声明,且有class声明为类,接口是用interface来声明,但不能用class来声明,因为接口不是类!
    • 抽象类的抽象方法一定要用abstract来声明,而接口则不需要
    • 抽象类是用extends关键字让子类继承父类后,在子类实现详细的抽象方法!而接口则是用implements让普通类在类里实现接口的详细方法,且接口可以一次性实现多个方法,用逗号分开各个接口就可

评论区 (0)

没有记录
支持 markdown,图片截图粘贴拖拽都可以自动上传。
黑白课堂

黑白课堂 · 技术专家

专业PHP开发

年度VIP 站长创业者玉树凌风每天醒来0收入
查看更多

最新视频课程

钻级赞助商