【发布时间】:2010-11-30 05:54:43
【问题描述】:
只是一个关于标准的问题。
我为 PHP 会话管理创建了一个包装类,它有助于根据访问它的某些内部模块自动组织会话数据。它被设计为单例,使用getInstance() 方法进行实例化,因为在给定时间只会有一个会话。此外,这对我来说也是一个好处,因为我能够在session_start() 失败的情况下(尽管可能有限)防止会话对象的实例化。举个例子:
public static function getInstance(){
if(!self::$_instance || !session_id()){
if(session_start()){
self::$_instance = new self(session_id());
}else{
return;
}
}
return self::$_instance;
}
我的问题是;虽然使用网关getInstance() 方法在这里很自然地工作有几个原因,但是如果对象依赖于外部条件,在类中实现公共静态getInstance() 或create() 方法来控制对象创建是常见/好的做法吗?
我发现自己坚持一个约定,在单例的情况下提供getInstance(),在多个实例对象的情况下提供create()。
TL;DR:我一直使用getInstance() 和create() 方法来控制所有对象实例化。我做错了吗?
编辑:稍微细化我的问题;除了将getInstance() 用于单例之外,我的构造函数是否使用create() 方法进行包装,目的更少,更倾向于不良约定?我应该从真正的构造函数中抛出异常,还是继续从 create() 返回 false?
【问题讨论】:
标签: php design-patterns session singleton