3

我对如何为对象实现状态感到两难。假设我们有这个:

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; 

}

什么方法会更好——也许是第三种方法?我在这里朝着正确的方向前进吗?

谢谢。

4

1 回答 1

0

通常你会用Marker Interfaces 来做这种事情。
我想这是我们正在谈论的某种 ORM?比我还假设有某种对象处理您的实体的持久性。让该对象检查$entity instanceof Deletable并采取行动。

于 2012-10-18T12:13:15.180 回答