【发布时间】:2010-11-01 07:28:52
【问题描述】:
这实际上是一个有趣的问题,并且有一个简单(但丑陋)的解决方法(见下文)。
所以我在问是否有更好的方法来做到这一点。
我想做的是让对象构造函数返回其他东西而不是新实例。
这是我想要实现的一个示例:
$GLOBALS['object_cache']=array();
class Test {
public function __construct($id=0){
if(isset( $GLOBALS['object_cache'][$id] ))
return $GLOBALS['object_cache'][$id];
$GLOBALS['object_cache'][$id]=$this;
}
}
$t0=new Test(0);
$t1=new Test(1);
$t01=new Test(0);
// modifying $t01 would presumably also modify $t0
简单(但丑陋?)的修复:
$GLOBALS['object_cache']=array();
class Test {
public static function create($id=0){
if(isset( $GLOBALS['object_cache'][$id] ))
return $GLOBALS['object_cache'][$id];
$new=new Test();
$GLOBALS['object_cache'][$id]=$new;
return $new;
}
}
$t0=Test::create(0);
$t1=Test::create(1);
$t01=Test::create(0);
// modifying $t01 would presumably also modify $t0
你们怎么看?顺便说一句,示例 1 不起作用;无论返回语句如何,它都会返回一个新实例。
所以我错过了什么,还是第二个更好的方法?
PS:无需说明模式(工厂/单例)的明显...
【问题讨论】:
标签: php oop caching constructor