首页 > 生活服务 > 程序猿源

程序猿源

php的abstract 与 interface 的区别与用法

管理员 11月前 82浏览

结论

抽象类需要继承,用extends,而接口需要实现,用implements;

一个类可以实现多个接口,但只能继承一个抽象类

接口中每个方法都只有声明而没有实现,其中的每个方法实现类必须要实现;而抽象类中只需要实现抽象方法,其它方法可以选择性的实现;

接口中只能声明public的方法,不能声明private和protected的方法,不能对方法进行实现,也不能声明实例变量;但是抽象类中可以

抽象类使用场景

定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用 abstractclass 定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。

某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。 abstract 的中介作用可以很好地满足这一点。

规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特 定的功能 。

abstract class BaseShop
{
  public function buy($gid)
  {
      echo('你购买了ID为 :'.$gid.'的商品');
  }
  public function sell($gid)
  {
      echo('你卖了ID为 :'.$gid.'的商品');
  }
  //  abstract 声明之后的方法,继承这个抽象类的子类一定要实现 
  abstract public function view($gid)
  {
      echo('你查看了ID为 :'.$gid.'的商品');
  }
}
class BallShop extends BaseShop
{
     var $itme_id = null;
     public function __construct()
     {
         $this->itme_id = 2314;
     }
     public function open()
     {
         $this->sell($this->itme_id);
     }
}

接口类使用场景

  1. 类与类之间需要特定的接口进行协调,而不在乎其如何实现。

  2. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。

  3. 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。

  4. 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

 interface Shop
 {
       public function buy($gid);
       public function sell($gid);
       public function view($gid);
 }
 
 class BaseShop implements Shop
 {
    public function buy($gid)
    {
      echo('你购买了ID为 :'.$gid.'的商品');
    }
    public function sell($gid)
    {
       echo('你卖了ID为 :'.$gid.'的商品');
    }
    public function view($gid)
    {
       echo('你查看了ID为 :'.$gid.'的商品');
    }
 }


差异比较

相同点

  1. 两者都是抽象类,都不能实例化

  2. interface 实现类及 abstractclass 的子类都必须要实现已经声明的抽象方法

不同点

  1. interface 需要实现,要用 implements ,而 abstractclass 需要继承,要用 extends

  2. 一个类可以实现多个 interface ,但一个类只能继承一个 abstractclass

  3. interface 强调特定功能的实现,而 abstractclass 强调所属关系。



版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
关注微信公众号:"cq_xifan";

评论

收藏

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

Powered By 重庆饭哥 © 2014-2022 教学资源分享站 渝ICP备20005643号-1

相信有一天,理想主义终将所向披靡.

Design by © 2021 XIFAN. Powered by 重庆饭哥

站点声明: 本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

友情链接: 官方网站 饭哥在线工具 饭哥导航 在线运行 博客交流社区 重庆艺术工程职业学院