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