Слияние 2 пользовательских объектов - PullRequest
0 голосов
/ 02 ноября 2011

Мне нужно объединить 2 пользовательских объекта одного типа. Вот как выглядит класс:

<?php
class a{

    public $one;

    public $two;

          public function doSomething(){
              //do stuff
          }

}

У меня есть 2 экземпляра a, которые мне нужно объединить. Я понимаю, что могу использовать array_merge так:

$result = (object)array_merge((array)$a1, (array)$a2);

Но проблема в том, что мне нужен результат класса a, а не stdObj.

Если я это сделаю:

$result->doSomething()

ошибка: PHP Fatal error: Call to undefined method stdClass::doSomething()

Так как мы не можем печатать приведение к не примитивам, нельзя: $result = (a)array_merge((array)$a1, (array)$a2);

Помимо использования цикла для итерации одного объекта, получения и установки значений, существуют ли более эффективные или более точные способы сделать это?

1 Ответ

0 голосов
/ 02 ноября 2011

array_merge () - это , а не , что вы хотите.Как вы правильно заметили, они не являются массивами

Мне кажется, что вам нужно то, что в C ++ называется конструктором копирования .

По сути, вам придетсязакодируйте его самостоятельно, поэтому добавьте функцию с именем merge () в ваш класс, которая принимает один параметр, который является другим объектом этого класса.

Чтобы кодировать его, вам просто нужно назначить каждое отдельное поле данных параметрак данным вашего объекта.

Прочтите руководство по PHP для клонирование объекта для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...