我在寫一個類來處理一個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