今天早些时候,我研究了PHP的abstract classes、interfaces和traits。
据我所知,抽象类表示“任何使用me的对象都将使用这些方法和属性”,接口表示“任何使用me的对象都必须具有这些方法和属性”,而特征表示“任何使用me的对象都将具有这些方法和属性”。
现在,我的问题是,如果你在使用接口和特征时得到了抽象类的等价物,为什么会有抽象类呢?
如果我错了,接口和特征并不等同于抽象类,你能解释一下为什么不是这样吗?
发布于 2014-01-01 14:36:39
当您使用特征时,您只需要一个给定的类来实现某些方法。
您不会继承任何属性或方法,也不会强制对象进入任何继承树。
因此,你可以有几个完全不相关的类使用相同的特征,只是为了保证这些类的任何对象都将支持给定的方法。
这就是PHP如何处理著名的Mixin。基本上,Mixin只是一个可以与其他几个类共享共同特征的类。特征允许对类的方法施加约束,而与这些类是否相互继承的方式无关。
当你想让一个类将两个父类的行为结合起来时,你可以使用特征来获得相同的结果,而不是麻烦地去初始化一堆不想要的其他东西,而不是必须进行多个继承到愚蠢的地步。
https://stackoverflow.com/questions/20865988
复制相似问题