如何合并两个对象?

时间:2010-07-22 22:57:41

标签: php oop object merge

  

可能重复:
  What is the best method to merge two PHP objects?

我有一个对象$ foo,它已经定义了一些方法和属性,另一个对象是$ bar,它只是一组属性。我想将$ bar的全部内容合并到$ foo中,以便$ bar的所有属性都成为$ foo的属性。

所以,如果事先我有,$ bar-> foobar,之后我应该可以使用$ foo-> foobar。

目前,我正在做以下事情:

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

但是,如果我使用数组,我只会执行以下操作之一:

$foo += $bar;

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

对于对象是否有类似的方法,或者我是否以正确的方式进行此操作?

请注意,我不知道$ bar本身会成为$ foo的财产,即不是$ foo-> bar-> foobar

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

如果$ bar包含所有$ foo的属性,那么它就是Foo。因此,您的Bar类应该扩展(继承自)Foo。 (反之亦然,如果我的名字混淆了!)

如果由于某种原因不想使用继承,可以将一个对象保留在另一个对象中,并通过诸如__get()和__set之类的魔术方法动态地从外部对象重定向对其他属性的调用(请参阅{{ 3}})

答案 2 :(得分:0)