2013-10-19 81 views
0

我有testClass類,我想從其構造函數中的非序列化對象創建新對象。可能嗎?事情是這樣的:從其構造函數中的反序列化對象創建新對象

class testClass { 
    public __constructor($id) { 
     $queryData = DB::query(sql); 
     $object = unserialize($queryData); 
     $this = $object; 
    } 
} 

這樣的代碼的其餘部分將不會理會對象是如何構建的:

$object = new testClass(3); 
+1

你不能.... $這已經存在,並在您正在嘗試變態的地步了積極執行;但你可以採取工廠方法 –

+0

@MarkBaker,謝謝,我很感激,如果你提供了一個例子作爲答案,如果可能 –

+0

[什麼是工廠設計模式在PHP?](http://stackoverflow.com/questions/2083424 /什麼是工廠設計模式在PHP /) –

回答

0

unserialize應該給你已經是對象。

$object = new TestClass(); 
$queryData = serialize($object); 
$object2 = unserialize($queryData); 
// object2 is now a copy of object 
+0

是的,但我想使正在構建的對象被解碼的對象 –

+1

你不能重新分配'this'。你可以嘗試一個工廠函數,但最終你會減少這個「反序列化」。 – Halcyon

+0

對,我的目標是不告訴外部代碼如何構造對象。你能舉一個工廠的例子嗎? –

0

由於Mark BakerFrits van Campen建議,我用廠:

public static function factory($idText = NULL, $rawText = NULL, $properties = NULL) { 
    if ($idText === NULL) { 
     return new Article($idText, $rawText, $properties); 
    } else { 
     $fetchedObject = self::fetchStoredObject($idText); 
     if ($fetchedObject !== NULL) { 
      return $fetchedObject; 
     } else { 
      throw new Exception('Article with ID ' . $idText . ' does not exist'); 
     } 
    } 
} 
相關問題