I would like to be able to do the following:
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
How can I extend $obj so that it contains the properties of $obj2, eg:
$obj->status //"success"
$obj->message // "OK"
I know I could use an array, add all properties to the array and then cast that back to object, but is there a more elegant way, something like this:
extend($obj, $obj2); //adds all properties from $obj2 to $obj
Thanks!
This is more along the lines of they way that you didn't want to do it....
$extended = (object) array_merge((array)$obj, (array)$obj2);
However I think that would be a little better than having to iterate over the properties.
if the object is the instance of stdClass (that's in your case) you can simply extend your object like...
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
$obj->message = $message;
$obj->subject = $subject;
.... and as many as you wish.
You could use get_object_vars() on one of the stdClass
object, iterate through those, and add them to the other:
function extend($obj, $obj2) {
$vars = get_object_vars($obj2);
foreach ($vars as $var => $value) {
$obj->$var = $value;
}
return $obj;
}
Not sure if you'd deem that more elegant, mind you.
Edit: If you're not stingy about actually storing them in the same place, take a look at this answer to a very similar question.
have a look at object cloning http://php.net/manual/en/language.oop5.cloning.php