【发布时间】:2013-09-25 12:38:50
【问题描述】:
我目前正在用 php 设计我的系统,并且有很多共享共同属性的实体现在我在想我可以制作接口以便将事物抽象出来。例如,我有以下实体:
Category(name, parent, modification_date, creation_date, state, lang, en_id, sort_order)
Page(name, content, modification_date, creation_date, state, state_message, approver, lang, en_id, seo_description, seo_title)
Faq(name, content, modification_date, creation_date, state, state_message, approver, lang, en_id, seo_description, seo_title)
状态可以是已批准、待定或草稿
我正在考虑在php中制作以下接口
IAutostoreDate(creation_date, modification_date)
ISeoAble(seo_description, seo_title)
IApprovable(state, state_message, approver)
ITranslatable(lang, en_id)
还有更多我要抽象出来的东西。
问题是,由于某些实体会实现许多类,因此这是一种建议还是不鼓励的方法?
【问题讨论】:
-
您是否考虑过使用特征(也称为混入)? php.net/manual/en/language.oop5.traits.php
-
您的意思是例如代替 ISeoAble 和 IApprovable 一个通用接口吗?如果是这种情况,有时它们必须单独使用一个而不使用另一个
-
好吧,我不认为特质会起作用,因为不是在类基础上应用一些逻辑,而是我想在接口基础上应用它,所以例如我想要一个像approve(IApprovable $toApprove )
-
这就是接口的用途。我认为你这样做是正确的。你可以实现多个接口(虽然你不能在 PHP 中扩展多个类),所以你的方法没有什么不好的。
-
@user1169526 来自您的评论我不确定您是否理解 mixins/traits 的概念。您所描述的常见功能似乎是 mixins 的理想案例。