2011-11-02 98 views
0

我需要合併2個相同類型的自定義對象。下面是類的樣子:合併2個自定義對象

<?php 
class a{ 

    public $one; 

    public $two; 

      public function doSomething(){ 
       //do stuff 
      } 

} 

我已經得到了a,我需要合併到一起2實例。我明白,我可以使用array_merge這樣的:

$result = (object)array_merge((array)$a1, (array)$a2); 

但問題是,我需要的結果是a類的,而不是stdObj

如果我做的:

$result->doSomething() 

一個錯誤的結果:PHP Fatal error: Call to undefined method stdClass::doSomething()

既然我們不能強制類型轉換到非原語,缺一不可:$result = (a)array_merge((array)$a1, (array)$a2);

除了使用循環遍歷一個對象和get和set值,是否有更好的方法來執行此操作?

+0

請參閱http://stackoverflow.com/questions/455700/what-is-the-best-method-to-merge-two-php-objects – galchen

回答

0

array_merge()是不是你想要什麼。正如你正確地指出的那樣,它們不是陣列

這聽起來像你需要什麼C++調用copy constructor。基本上,你將不得不自己編寫代碼,因此在類中添加一個名爲merge()的函數,該函數只需要一個參數,它是該類的另一個參數。

要對其進行編碼,您只需將參數數據的各個字段分配給對象的數據即可。

閱讀有關object cloning的PHP手冊以獲取更多信息。