我们可以在Doctrine中使用单例模型类吗?
对于Singleton类,我应该有一个私有/受保护的构造函数....但这是不可能的,因为我正在扩展一个具有公共构造函数的Doctrine类
您可以争论在与数据库交互时使用Singleton模式,但只考虑这种情况:
我有一个用户操作记录器,它记录到数据库。此记录器执行一些初始化 在构造函数中(从会话中获取当前用户信息)这是常见的 对于特定执行的记录器的所有实例。
使用Doctrine时,似乎没有办法为模型实现单例模式?
答案 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是无状态的(是的,有一些类似于状态的存储对象的方法)。因此,无论如何,你不可能一次拥有任何一个以上的对象。