如果您可以使用接口和特征,为什么PHP具有抽象类?

2022-08-30 20:41:04

今天早些时候,我正在研究PHP的抽象类接口特征

据我所知,一个抽象类说“任何使用我的东西都会使用这些方法和属性”,接口说“任何使用我的东西都必须具有这些方法和属性”,而特征说“任何使用我的东西也会有这些方法和属性”。

现在,我的问题是,如果你在使用接口和特征时得到一个抽象类的等价物,为什么会有抽象类?

如果我错了,接口和特征不等同于抽象类,你能解释一下为什么情况并非如此吗?


答案 1

我认为在如何以及何时使用它们方面存在一些哲学差异。

你说:

  1. 抽象类:“任何使用我的东西都会使用这些方法和属性”
  2. 接口:“任何使用我的东西都必须具有这些方法和属性”
  3. 特征:“任何使用我的东西也会有这些方法和属性”。

如果你专注于自己的措辞,这是有道理的。

抽象类实际上定义了抽象的事物,例如车辆是一个抽象的事物,直到或除非它以汽车或自行车的形式具体化。接口既没有定义它,也没有定义特征。

接口补充了类继承功能,其中一个类从多个类继承(只有某些语言提供多重继承,例如C / C++)。顾名思义,接口关注的是接口,而不是在实现它的类中实现接口方法。它使类PLUMENT&PLAYABLE,因此每个人都应该遵循标准。如果您进一步阅读有关OOP的工厂和适配器模式的信息,您将了解它。

特征具有未绑定到特定类的实现/功能。相反,它可以在不同的类中找到。它就像遗传学中的一个基因,在父母中保持沉默,只出现在某些孩子身上。或者简洁的选择性继承,但不绑定到单个类。因此,它提供了一种更好的代码重用方法。

编辑接口 + 特质 != 抽象类 ,因为当使用特质继承时,就像你选择要使用的特定特质一样,而使用继承是强制性的或由父类决定的,你没有自由!selectiveAbstract Class


答案 2

这有点像说如果存在浮点数,为什么整数存在,它们都有自己的特定目的,但更重要的是,看看PHP的历史会对此有所了解:

PHP最初是在没有任何类支持的情况下构建的,多年来,随着我们越来越推,PHP的功能被添加进来扩展PHP的功能(并且可以争论地赶上其他基于OOP的语言)。

5.0 菲律宾比索

2004 年 - 引入抽象类和接口

5.4 菲律宾比索

2012 年 - 引入性状

这是一个8年的中断,在那段时间里,出现了添加对实现接口的支持的需求,因此这个特征诞生了。


推荐