我对如何为对象实现状态感到进退两难。 假设我们有这个:
class User {
private $_active;// 1 or 0
private $_deleted;// 1 or 0
...
}
这些属性——正如我所见——暗示了用户对象的状态。 我想做的是定义一些事件,如 afterActivate() 或 afterDelete() 以便我可以链接我的例程。 IE。激活后更新一些计数器,删除后也更新一些计数器...
所以我目前正在考虑两种方法 - 第一种是创建类 Activable 和 Deletable(不要介意命名),然后让 User 通过继承层次结构继承这些类。
class Activable {
protected afterActivate(){};
}
class Deletable {
protected afterDelete(){};
}
class Activable extends Deletable {}
class User extends Activable{}
我发现这种方法有两个问题 - 第一个是 Activable 类现在隐含了错误的 Deletable 状态,第二个问题是 - 如果我有更多状态 - 5-6 个状态,继承层次结构可能会变得相当复杂. (因为 User 将扩展模型类,模型类将扩展其他内容等...)
第二种方法是在 PHP 中使用特征并使用它们来实现这一点。 所以我会有类似的东西
class User{
use Activable, Deletable;
}
哪种方法更好 - 也许是第三种方法? 我的方向是否正确?
谢谢。
最佳答案
通常你会使用Marker Interface
是为了这种事。
我想这是我们正在谈论的某种 ORM?比我还假设有某种对象处理您的实体的持久性。让该对象检查 $entity instanceof Deletable
并据此采取行动。
关于PHP : implementing states with objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12954180/