我对如何为对象实现状态感到两难。假设我们有这个:
class User {
private $_active;// 1 or 0
private $_deleted;// 1 or 0
...
}
这些属性 - 正如我所看到的 - 暗示了用户对象的状态。我想做的是定义一些事件,如 afterActivate() 或 afterDelete() 以便我可以链接我的例程。即激活后更新一些计数器,删除后也更新一些计数器...
所以我目前正在考虑两种方法 - 第一种是创建 Activable 和 Deletable 类(不要介意命名),然后让 User 通过继承层次结构继承这些类。
class Activable {
protected afterActivate(){};
}
class Deletable {
protected afterDelete(){};
}
class Activable extends Deletable {}
class User extends Activable{}
我看到这种方法有两个问题 - 第一个是 Activable 类现在隐含了错误的可删除状态,第二个问题是 - 如果我有更多状态 - 5-6 个状态,继承层次结构可能会变得非常复杂。(因为用户将扩展模型类,这将扩展其他东西等......)
第二种方法是在 PHP 中使用特征并使用它们来实现这一点。所以我会有类似的东西
class User{
use Activable, Deletable;
}
什么方法会更好——也许是第三种方法?我在这里朝着正确的方向前进吗?
谢谢。