Дополнительно
Каков наилучший метод слияния двух объектов PHP?
У нас есть два объекта PHP5, и мы хотели бы объединить содержимое одного из них со вторым. Между ними нет понятия подклассов, поэтому решения, описанные в следующей теме, неприменимы.
Как скопировать объект PHP в объект другого типа
//We have this:
$objectA->a;
$objectA->b;
$objectB->c;
$objectB->d;
//We want the easiest way to get:
$objectC->a;
$objectC->b;
$objectC->c;
$objectC->d;
Примечания:
- Это объекты, а не классы.
- Объекты содержат довольно много полей, поэтому foreach будет довольно медленным.
- Пока что мы рассматриваем преобразование объектов A и B в массивы, затем объединяем их с помощью array_merge() перед повторным преобразованием в объект, но мы не можем сказать, что гордимся этим.
214
13
Это на самом деле работает, когда объекты имеют методы. (проверено на PHP 5.3 и 5.6)
Если ваши объекты содержат только поля (без методов), это работает:
Вы можете создать другой объект, который перенаправляет вызовы магических методов базовым объектам. Вот как вы будете обрабатывать `__get', но чтобы это работало в полной мере, вам придется переопределить все соответствующие магические методы. Возможно, вы найдете синтаксические ошибки, так как я ввел это просто из головы.
Удачи.
Я понимаю, что используя общие объекты [stdClass()] и бросая их как массивы отвечает на вопрос, но я думал, что композитор был отличный ответ. Но я чувствовал, что это могло использовать некоторые дополнительные функции, и могут быть полезны для кого-то другого.
Особенности:
Код:
Использование:
Пример:
Очень простой, учитывая решение у вас есть объект A и B:
Что's все. Теперь у вас есть обя со всеми значениями из objB.
решение для сохранения,как методы и свойства объединены onjects-создать класс комбинаторов, которые могут
простое использование
Объединить любое количество исходных объектов
Класса\ArrayObject
имеет возможность _exchange_ текущего блока, чтобы отсоединить оригинальный _reference_. Для этого он поставляется с два удобных метода:
exchangeArray()и
getArrayCopy(). Остальное array_merge простые
()представленной объекта с публичных свойств
ArrayObject это:Использование так же просто, как это:
Я бы пошел с подключением второго объекта в собственность первого объекта. Если второй объект является результатом функции или метода, использовать ссылки. Экс:
Позвольте's держите его просто!
Если это не'т ответить на ваш вопрос, это, несомненно, поможет на пути к ответу. Кредит для кода выше идет себе :)
Здесь-это функция, которая будет плющить объект или массив. Используйте это только если вы уверены, что ваши ключи являются уникальными. Если у вас есть ключи с одинаковыми именами они будут перезаписаны. Вы должны поместить это в классе и замены "функции" с именем вашего класса. Наслаждайтесь...
Этот фрагмент кода будет рекурсивно конвертировать эти данные в один тип (массив или объект), не вложенные циклы foreach. Надеюсь, что это помогает кто-то!
После того как объект в массив формате, который можно использовать array_merge и преобразовать обратно в объект, если вам нужно.
Процессуальным способом
Все заслуга: Джейсон Окли