Singleton模型学说

时间:2010-07-02 22:05:17

标签: singleton doctrine models

我们可以在Doctrine中使用单例模型类吗?

对于Singleton类,我应该有一个私有/受保护的构造函数....但这是不可能的,因为我正在扩展一个具有公共构造函数的Doctrine类

您可以争论在与数据库交互时使用Singleton模式,但只考虑这种情况:

我有一个用户操作记录器,它记录到数据库。此记录器执行一些初始化  在构造函数中(从会话中获取当前用户信息)这是常见的  对于特定执行的记录器的所有实例。

使用Doctrine时,似乎没有办法为模型实现单例模式?

3 个答案:

答案 0 :(得分:7)

Doctrine模型类的实例对应于一个实体,例如User的实例代表一个用户,我怀疑你只有一个用户。 将您的其他代码放在单独的类UserManager或其他类中。

class Logger { // plain old singleton class

    function log(x) {
        entry = new LogEntry(x); // LogEntry extends Doctrine_Model
        entry.save();
    }

}

答案 1 :(得分:1)

您可以覆盖公共构造函数,使其使用单例工厂方法,如果它尚不存在则创建实例,或者检索现有实例,然后将实例返回给构造函数的调用者

答案 2 :(得分:0)

你的问题不在于Doctrine,它在于PHP是无状态的(是的,有一些类似于状态的存储对象的方法)。因此,无论如何,你不可能一次拥有任何一个以上的对象。