Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I merge two objects? [duplicate]

Possible Duplicate:
What is the best method to merge two PHP objects?

I have an object, $foo, which has some methods and properties already defined and another object, $bar, which is just a set of properties. I want to merge the entirety of $bar into $foo such that all the properties of $bar become properties of $foo.

So if beforehand I had, $bar->foobar, afterwards I should be able to use $foo->foobar.

At the moment, I am doing the following:

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

However, if I were using arrays, I would just do one of the following:

$foo += $bar;

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

Is there a similar way of doing this with objects or am I doing it the right way already?

Please note that I do not what $bar to itself become a property of $foo i.e. not $foo->bar->foobar

like image 579
Rupert Madden-Abbott Avatar asked Jul 22 '10 22:07

Rupert Madden-Abbott


2 Answers

Try this code

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
like image 99
zetanova Avatar answered Oct 12 '22 08:10

zetanova


If $bar has all of $foo's properties, then it is a Foo. Thus, your Bar class should extend (inherit from) Foo. (Or vice versa, if I got your names confused!)

If you don't want to use inheritance for some reason, you can keep one object inside the other, and redirect calls to the other's properties from the outer object dynamically via magic methods like __get() and __set (see here)

like image 40
J Cooper Avatar answered Oct 12 '22 08:10

J Cooper