我在写一个类来处理一个memcached对象。这个想法是创建abstract class Cachable
和所有可缓存的对象(如用户,发布等)将是所述类的子类。
类提供了一些方法,例如Load()
如果对象没有被缓存,其调用抽象功能LoadFromDB()
,函数刷新/无效的高速缓存等
的主要问题是在Load()
;我想要做类似的事情:
protected function Load($id)
{
$this->memcacheId = $id;
$this->Connect();
$cached = $this->memcache->get(get_class($this) . ':' . $id);
if($cached === false)
{
$this->SetLoaded(LoadFromDB($id));
UpdateCache();
} else {
$this = $cached;
$this->SetLoaded(true);
}
}
不幸的是我需要$this
成为$cached
(缓存的对象);有没有办法做到这一点? “每一个可缓存的对象都来自可缓存的类”是一个糟糕的设计理念吗?
不应该“被缓存”是一个接口,而不是一个抽象类?为什么你不能使用'__sleep()'和'__wakeup()'魔术函数,或者实现'Serializable'接口? – 2010-06-01 22:04:58
@Byron:它不能实现,因为接口不能实现功能。在这种情况下,我不明白__sleep/__ wakeup如何帮助我。 – 2010-06-02 15:54:13