在php中模拟多重继承

时间:2009-10-29 06:32:14

标签: php inheritance multiple-inheritance

我有一个模型系统:

abstract class R00_Model_iUnique { }
abstract class R00_Model_iFamilyUnique extends R00_Model_iUnique { } // for models with hierarchy
abstract class R00_Model_iTaggedUnique extends R00_Model_iUnique { } // for models with tags

// and, for example
class R00_Model_User extends R00_Model_iUnique { }
class R00_Model_Comment extends R00_Model_iFamilyUnique { }
class R00_Model_Post extends R00_Model_iTaggedUnique { }

R00_Model_iCommentableUnique和R00_Model_Post都希望从中继承。但这是不可能的,它已经从R00_Model_iTaggedUnique继承而来,我不认为从R00_Model_iCommentableUnique继承R00_Model_iTaggedUnique是聪明的,反之亦然。我只想到了一个如何实现它的想法,但我有些疑惑。也许你可以告诉我一些聪明的方法或批评这种方法?


我想要制作R00_Model_i * Unique不是类,而是接口,并创建辅助对象,例如R00_Model_Helper_iUnique(也许它是一个常见的模式,并且有一个很酷的名字,我不认为'Helper'会是很酷吗?)。然后,在R00_Model_iUnique中,创建__call(),它检查被调用对象的所有接口并在帮助器中查找被调用的方法。

或者有太多的反思和其他邪恶的缓慢的东西,不是吗?

1 个答案:

答案 0 :(得分:1)

使用界面和助手(组合)是正确的方向。

这正是为什么设计模式书(GoF)的原则“赞成组合而非继承”的原因之一。

组合将为您提供使用不同类方法所需的灵活性 在你需要的课程中。