2015-10-13 46 views
0

我使用memcache使用serialize和unserialize来存储PHP类对象。 有什么办法可以使用新方法取回原始类对象?PHP从高速缓存中获取对象

我的例子:

class Test 
{ 
    public $id; 

    public function __construct($id) 
    { 
     if (InCache($id)) { 
      return unserialize(GetFromCache($id)); 
     } else { 
      $this->id = $id; 
      SaveToCache(serialize($this)); 
     } 
    } 
}  

呼叫:

$t = new Test(1); 

如果ID是在高速缓存或没有,我需要回到相同的输出:

Test Object 
(
    [id] => 1 
) 

任何人都可以帮忙吗?

回答

3
在PHP

你可以在不return一个__construct功能

,你可以从一个工厂的Funktion这样获得新的对象:

class Test 
{ 
    public $id; 

    protected function __construct($id) 
    { 
     $this->id = $id; 
     SaveToCache(serialize($this)); 
    } 

    public static function getNewObject($id) 
    { 
     if (InCache($id)) { 
      return unserialize(GetFromCache($id)); 
     } else { 
      return new self($id); 
     } 
    } 
} 

呼叫:

$t = Test::getNewObject(1); 
+0

感谢。最后一个问题:做同样的解决方案没有自我替换功能吗? – Ondra

+0

@Ondra在php中没有selfreplace功能。那是对的。 – Kanti