何时在PHP中使用extends/abstract和implements/interface

jam*_*lin 3 php oop abstract-class interface

所以,我开始在PHP中充实抽象接口的概念.
但什么时候它真的有用?

当然我可以使用界面来构建我的类的规则,因此它们都遵循特定的模式.但什么时候真的有用?

为什么我应该创建一个抽象类而不是只创建一个由它自己工作的类,但对其他类有用.
摘要我也许可以把头放在身边,看看它有用,例如通过制作一般课程.就像创建一个抽象的Database类,然后将它扩展到Mysql-和MsAccess数据库类.赋予两种类似的功能,在两种情况下都可以实现无缝体验.

但实际上,任何人都可以给我当一个更好的例子抽象接口真的有用吗?
请注意,我知道它是如何工作的,或者如何编写代码,而不是如何或何时使用它.

谢谢!

lon*_*day 7

摘要意味着"这里是你班级的模式,以及一些可以让你开始的代码".抽象类的设计者可以将某些方法标记为需要由扩展类(abstract)提供,或者as final,这意味着类不能覆盖它们.

接口意味着"这里是您班级的模式,但您必须自己编写所有代码".接口中声明的任何方法和属性必须由实现接口的类提供.

所以基本上一个经验法则是:

如果您拥有可以或必须由子类使用的代码,则需要一个抽象类.如果只有方法和属性声明,则可以使用接口.

不要忘记,使用抽象类会在某种程度上限制您,因为后代类只能扩展一个类,而它可以实现任意数量的接口.


hak*_*kre 6

接口不是类,而抽象类已经是类.

由于每个类都有一个接口(根据定义),interface允许您指定任何类旁边的接口,无论是否抽象.

对接口进行编程然后允许您保持相同接口的同时将一个类替换为另一个类.因此它使您的代码更少耦合.它不再针对具体类进行编程,而是"仅针对更轻量级的接口".如果您不想针对具体的类名而不是针对类型进行编程,那么接口就非常有用.您可以将对象替换为实现相同接口的任何其他对象.

另一方面,抽象类 - 甚至称为抽象类 - 非常具体.但是,它不是最终的,所以它形成了一个类的模式,就像规范如何从一个类扩展它应该为某个功能编写.因为它是抽象的,它不能在没有延伸的情况下生存.抽象类用于创建基类,其代码将被多次使用以减少代码重复并且无法直接实例化.