【问题标题】:OO and PHP, using abstract and interface [closed]OO 和 PHP,使用抽象和接口 [关闭]
【发布时间】:2015-01-10 12:49:33
【问题描述】:

似乎我在这里遗漏了一些东西。我不明白它们有什么用?
含义:类之间的简单继承,能不能给出相同的结果?!

而且,更准确地说:
Interface 是 - 据我了解 - 一个 .. 函数名称列表。仅此而已。
那么,附加值是多少?

至于Abstract,好像是一个根本无法实例化的简单类,它的作用就是强制子类,继承一些方法。
再说一遍 - 附加值是什么?

这两种行为都可以使用常规类来实现。或者只是避免它(当涉及到Interface 对象时)

另外,请不要指向我重复的内容,我已经阅读了所有内容。他们解释了什么是抽象和接口,但没有回答我的问题。

谢谢。

【问题讨论】:

  • 请澄清问题,因为,我看到了 2 个问题
  • 而且我根本没有看到适合 SO 的问题。如果其他资源解释了这些构造是什么,他们应该解释它们有什么好处,或者它是微不足道的。如果两者都不是,则需要寻找其他资源
  • 您正在构建一个系统,并且希望保持对所构建内容以及您编写的对象 API(公共方法)的控制。如果您想强制某人实现特定方法以允许多态性(并在将来轻松切换类),然后告诉他们实现您的接口,当您切换出来时它会继续工作。如果你想强制一个接口,以及一些功能,使用带有抽象方法的抽象类:你可以定义一些基础功能并且任何抽象方法都必须被覆盖,就像一个界面。
  • interface 提供了需要实现的功能列表。你不能在普通班上做到这一点。 abstract 类的优点是,你不能产生抽象的东西。不会与普通班级一起工作。您应该认为大型项目需要这些机制来理清关系并让一切正常工作。

标签: php oop inheritance interface abstract-class


【解决方案1】:

抽象就是继承

鸭子是动物

接口就是契约

鸭子会游泳,鸭子会飞

Duck 必须具有 Animal 中的任何抽象方法,以及 Swim 和 Fly 中列出的所有方法

  • 更新

我的理解是它比继承模型更容易抽象。机器和动物摘要都可以有自己的抽象方法,详细说明某些运动元素。

知道自己可以飞行或游泳的特定子类可以自己实现接口。

飞机和鸭子有很多共同的飞行要求......合适的起飞/起飞着陆区,避免碰撞的方法,如何确定高度,如何确定与其他同类物体(鸭子)的距离就像接近一样,飞机没有)。

在这种情况下,机器和动物都是东西,所以也许我们只是让东西继承自具有飞行和游泳方法的抽象 - 但你最终可能会支持稍微奇怪的东西,比如 $theFish->步行()

相反,尽管我们可以保持继承模型简洁,并且只根据需要实现一个接口,该接口对对象一无所知,但可以指导对象如何定义自己适合用途(在本例中为飞行/游泳)。

【讨论】:

  • 他说:“……我都读过了。他们解释了什么是抽象和接口,”
  • @Cliffordlife 谢谢。我可以看到逻辑,但我不确定“保持清洁”是否足以成为创建语言对象的充分理由。我相信它有更多的原因
猜你喜欢
  • 2023-04-03
  • 2015-06-27
  • 2016-09-27
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2017-06-15
相关资源
最近更新 更多