2015-10-13 47 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