2010-07-22 92 views
5

可能重复:
What is the best method to merge two PHP objects?如何合并两个对象?

我有一个对象,$ foo,它具有一定的方法和已定义的属性和另一个对象,$吧,这仅仅是一组属性。我想将整个$ bar合并到$ foo中,这样$ bar的所有属性都成为$ foo的属性。

因此,如果事先有过$ bar-> foobar,那么我应该可以使用$ foo-> foobar。

目前,我做了以下内容:

foreach($bar as $key => $value) { 
    $foo->$key = $value; 
    } 

不过,如果我使用数组,我只想请执行下列操作之一:

$foo += $bar; 

$foo = array_merge($foo, $bar); 

有没有类似的方式用物体做这件事还是我已经做到了正确的方式?

请注意,我没有什么$栏本身成为$属性富即不是$ foo->酒吧,> foobar的

回答

3

如果$栏已全部$ foo的属性,那么它是一个Foo 。因此,你的Bar类应该扩展(继承)Foo。 (反之亦然,如果我把你的名字搞糊涂了!)

如果你不想因某种原因使用继承,你可以保留一个对象放入另一个对象,并将调用重定向到外部对象的其他属性动态地通过__get()和__set这样的魔术方法(请参阅here

0

没有内置函数可以将一个对象的所有属性复制到另一个对象。

你这样做的方式可能是最简单的。另一种方法是使用直接从$ bar返回属性的__get方法提供$ foo类。

15

试试这个代码

echo $obj->name; //show: carlos 
echo $obj2->lastname; //show: montalvo here 

$obj_merged = (object) array_merge((array) $obj, (array) $obj2); 

$obj_merged->name; //show: carlos 

$obj_merged->lastname; //show: montalvo here 
+0

这就是答案,肯定? – 2013-12-24 10:02:10

+1

应该指出,这个方法只适用于属性,而不是php版本<= 5.4的方法,据我所知。 – PowerAktar 2014-01-15 10:44:26

+0

是否可以附加一个对象,以便$ obj同时包含$ obj和$ obj2? – Moseleyi 2018-01-22 14:15:08