Возможный дубликат:
Каков наилучший способ слияния двух объектов PHP?
У меня есть объект $ 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
Если $ bar имеет все свойства $ foo, то это Foo. Таким образом, ваш класс Bar должен расширять (наследовать) Foo. (Или наоборот, если я смутил ваши имена!)
Если вы не хотите использовать наследование по какой-либо причине, вы можете сохранить один объект внутри другого и перенаправлять вызовы на свойства другого из внешнего объекта динамически с помощью магических методов, таких как __get () и __set (см. Здесь )
Попробуйте этот код
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
Нет встроенной функции для копирования всех свойств одного объекта на другой.
То, как вы это делаете, вероятно, самое простое. Альтернативой для класса $ foo является метод __get, который возвращает свойство непосредственно из $ bar.