PHP : implementing states with objects

标签 php oop

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

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/

相关文章:

C# 面向对象 : Using interface with type parameters in base concrete class

python - 在 Python 中,派生类可以被截断为基类吗?

c++ - 类方法的 SFINAE

c++ - 实现通用树

php - 我的 PDO 查询是否安全,不会受到 SQL 注入(inject)的影响

php - jquery 用 POST 然后显示 GD PHP

php - 表不创建 PHP mysql 数据库

javascript - 如何使文件只能通过 JQuery .load 访问

php - 运行 behat 时出错

python - 为什么我没有从第二次创建对象中获得值? - Python