Intereting Posts
Ошибка mysql: превышено максимальное количество подключений в час не работает синтаксическая ошибка, неожиданный $ end в PHP, и я уже проверил '}' Как изменить варианты выпадающего списка, основанные на другом выпадающем списке? Значения, полученные из базы данных Ожидается, что он получит всю строку из mysql, но сначала получит Самый быстрый способ подачи файла с помощью PHP Отображение имени поля в модели с использованием laravel Получение данных из нескольких таблиц SQLite Передача многомерного массива через POST с php Диалог пользовательского редактирования jqGrid PHP: как отобразить несколько записей таблицы MySQL в строке таблицы HTML с помощью MySQLi Пользовательский модуль Joomla 3.0: загрузка файла на представленную форму ajax CURSOR в proc, который только блокирует текущую строку UPDATEd (в то время как UPDATING), и ничего больше для продолжительности? Laravel 5.4 HTTP-тестирование – метод seeInElement Лучший способ передать данные с PHP на JavaScript для моего конкретного случая

Как слить два объекта?

Возможный дубликат:
Каков наилучший способ слияния двух объектов 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.