gpt4 book ai didi

php - 如果可以使用接口(interface)和特征,为什么 PHP 有抽象类?

转载 作者:IT王子 更新时间:2023-10-29 00:05:33 25 4
gpt4 key购买 nike

今天早些时候我正在研究 PHP 的 abstract classes , interfaces , 和 traits .

据我所知,抽象类表示“任何使用我的东西都将使用这些方法和属性”,接口(interface)表示“任何使用我的东西都必须具有这些方法和属性”,而特征表示“任何使用我的东西也将使用这些方法和属性”有这些方法和属性”。

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

如果我错了,接口(interface)和特征不等同于抽象类,您能解释一下为什么不是这样吗?

最佳答案

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

你说:

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

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

抽象类实际上是定义抽象的东西,例如 Vehicle 是一个抽象的东西,直到或除非它以一个形式具体化汽车或自行车。接口(interface)和特征都没有定义它。

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

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

编辑Interface + Trait != Abstract Class ,因为在使用 Trait 继承时 selective 因为您选择要使用的特定特征,而在使用 Abstract Class 时继承是强制性的或由父类决定没有自由!

关于php - 如果可以使用接口(interface)和特征,为什么 PHP 有抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20865988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com