如何合并两个对象?

5
我有一个对象 $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个回答

17

尝试这段代码

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

这肯定是答案,对吧? - Rob Grant
1
需要注意的是,据我所知,这种方法仅适用于 PHP 版本 <=5.4 的属性,而不适用于方法。 - PowerAktar
能否将一个对象附加到另一个对象上,使得 $obj 同时包含 $obj$obj2 - Moseleyi

3
如果$bar拥有$foo的所有属性,则它是一个Foo。因此,你的Bar类应该扩展(继承)Foo。(或者反过来,如果我把你们的名字搞混了!)
如果由于某种原因你不想使用继承,你可以在一个对象中保留另一个对象,并通过像__get()和__set这样的魔术方法动态地重定向对外部对象的属性的调用(请参见这里)。

0

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

您可能会想到最简单的方法。另一种方法是为 $foo 类提供一个 __get 方法,直接从 $bar 中返回属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接