PHP中的抽象类与接口有啥区别?

深入场景业务,选择合适的方式实现代码,靠的是能力、经验与智慧的综合,决不是一句谁好谁不好所能定性的

接口定义的是方法的一些规范,而抽象类定义的是类的模板。

接口中只能声明方法,但是不能定义具体的方法

抽象类中可以声明抽象方法,但是同时也可以具体去实现一些方法,但是抽象类不能被实例化

所以如果你想对类的方法定义一些规范的同时,也想赋予这个类一些具体实现方法,那么就用抽象。

如果你只想定义一个类的规范,那就用接口

  • 抽象:定义类的规范,赋予具体实现方法
  • 接口:定义类的规范

相同

  • 抽象类和接口都有抽象方法
  • 抽象类和接口都不能实例化
  • 抽象类和接口的使用意义(即作用)相同

区别

  • 抽象类的子类遵循继承原则,只能有一个父类;但一个类可以实现多个接口
  • 抽象类中可以有非抽象的已经实现的方法;接口中全是抽象的方法,都是方法定义
  • 抽象类中方法和变量的访问控制自己定义;接口中只能是公共的

抽象类可以作为基类,为子类提供公共方法,并定制公共的抽象让子类来实现。

而接口则是更高层次的抽象,它可以让我们依赖于抽象而不是具体的实现,为软件开发带来更多的扩展性。

接口

  • 对接口的使用是通过关键字 implements
  • 接口只能定义常量
  • 子类必须实现接口定义的所有方法
  • 接口只能定义不能实现该方法
  • 接口没有构造函数
  • 接口中的方法和实现它的类默认都是public类型的
  • 接口是一种特殊的抽象类

PHP中的抽象类与接口有啥区别?-Npcink
PHP中的抽象类与接口有啥区别?-Npcink

接口 - PHP面向对象编程(OOP)

抽象类

  • 对抽象类的使用是通过关键字extends
  • 不能被实例化,可定义子类必须实现的方法
  • 子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类一样
  • 如果一个类中有一个抽象方法,则该类必须定义为抽象类
  • 抽象类可以有构造函数,但是不能被实例化
  • 抽象类中那个的方法可以使用private,protected,pubic来修饰
  • 一个类可以同时实现多个接口,但一个类只能继承一个抽象类

抽象类的作用:就是严格要求子类的结构,所以抽象类其实就是一个规范。

PHP中的抽象类与接口有啥区别?-Npcink
PHP中的抽象类与接口有啥区别?-Npcink

抽象类 - PHP面向对象编程(OOP)

总结

掌握好接口的设计原则,往往就能看懂一大半的框架的设计思想。这也是我们面向对象中最最基础的特性。

抽象类作为公共基类来说可以为多态提供比较好的范本,它能够让你的子类有自己的个性又能使用父类的能力。

总之,深入场景业务,选择合适的方式实现代码,靠的是能力、经验与智慧的综合,决不是一句谁好谁不好所能定性的。

参考文章

php

常量 - PHP面向对象编程(OOP)

2022-8-24 17:05:25

php

抽象类 - PHP面向对象编程(OOP)

2022-8-24 17:19:31

⚠️
Npcink上的部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 1355471563#qq.com 或点击右侧 私信:Muze 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索