视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php中抽象类与接口的区别是什么
2020-11-02 17:28:47 责编:小采
文档

区别:1、抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法、可以有常量;2、抽象类用abstract关键字在类前声明,且有class声明为类,接口是用interface来声明,但不能用class来声明,因为接口不是类。

推荐:《PHP视频教程》

对于面向对象开发,抽象类与接口这两个东西是比较难理解的。下面本篇文章给大家介绍一下php中抽象类与接口之间的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

抽象类:是基于类来说,其本身就是类,只是一种特殊的类,不能直接实例,可以在类里定义方法,属性。类似于模版,规范后让子类实现详细功能。

接口:主要基于方法的规范,有点像抽象类里的抽象方法,只是其相对于抽象方法来说,更加。可让某个类通过组合多个方法来形成新的类。

php中抽象类与接口的区别

1、抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法、可以有常量

2、抽象类内未必有抽象方法,但接口内一定会有“抽象”方法

3、语法上有不同

4、抽象类用abstract关键字在类前声明,且有class声明为类,接口是用interface来声明,但不能用class来声明,因为接口不是类。

5、抽象类的抽象方法一定要用abstract来声明,而接口则不需要

6、抽象类是用extends关键字让子类继承父类后,在子类实现详细的抽象方法。而接口则是用implements让普通类在类里实现接口的详细方法,且接口可以一次性实现多个方法,用逗号分开各个接口就可

抽象类:

  • 抽象类无法被实例化,它的作用是为所有继承自它的类定义(或部分实现)接口。

  • 使用 abstract 关键字定义抽象类。

  • 可以像在普通类中那样在抽象类中创建方法和属性,在大多数情况下,一个抽象类至少包含一个抽象方法,抽象方法也是通过 abstract 关键字声明的。抽象方法只有方法声明,没有方法实现。不能编写方法体。

  • abstract class ShopProductWriter
    {
     protected $product = [];
    
     /**
     * 抽象类中可以定义普通方法
     */
     public function addProduct($shopProduct)
     {
     $this->product = $shopProduct;
     }
    
     /**
     * 定义一个抽象方法,只有方法声明,没有方法实现
     */
     abstract public function write();
    }
  • 任何继承自抽象类的类都必须实现所有的抽象方法,否则它自己就必须被定义为抽象类。子类不能仅仅实现抽象方法,还必须遵守方法签名。这意味着实现方法的访问控制不能比抽象方法更严格。实现方法还需要有与抽象方法相同数量的参数,以及相同的类型提示。

  • class XmlProductWriter extends ShopProductWriter
    {
     /**
     * 任何继承自抽象类的类都必须实现所有的抽象方法
     */
     public function write()
     {
     echo 'XmlProductWriter';
     }
    }

    接口:

  • 抽象类允许我们提供一些实现,但接口则是纯粹的模板。接口只定义功能,不能有实现。可以有属性和方法的声明,但不能有方法体。

  • 使用 interface 关键字声明接口。

  • interface Price
    {
     /**
     * 只有方法声明,没有方法实现
     */
     public function getPrice();
    }
  • 任何实现该接口的类都必须实现这个接口定义的所有方法,否则这个类就只能被声明为抽象类。

  • 可以在类的声明中使用 implements 关键字让它实现接口。

  • class ShopProduct implements Price
    {
     protected $price;
    
     public function getPrice()
     {
     // TODO: Implement getPrice() method.
     return $this->price;
     }
    }
  • 一个实现类与它所实现的接口具有相同的类型。

  • 一个类可以在继承一个父类的同时实现多个接口,implements 关键字后面跟着多个接口的名字,它们之间由逗号分隔开来。

  • 下载本文
    显示全文
    专题