php - array - ¿Cómo fusiono dos objetos?
array combine (3)
Posible duplicado:
¿Cuál es el mejor método para fusionar dos objetos PHP?
Tengo un objeto, $ foo, que tiene algunos métodos y propiedades ya definidos y otro objeto, $ bar, que es solo un conjunto de propiedades. Quiero fusionar la totalidad de $ bar en $ foo de manera que todas las propiedades de $ bar se conviertan en propiedades de $ foo.
Entonces, si de antemano tengo, $ bar-> foobar, después podré usar $ foo-> foobar.
Por el momento, estoy haciendo lo siguiente:
foreach($bar as $key => $value) {
$foo->$key = $value;
}
Sin embargo, si estuviera usando matrices, solo haría una de las siguientes:
$foo += $bar;
$foo = array_merge($foo, $bar);
¿Hay alguna manera similar de hacer esto con objetos o ya lo estoy haciendo de la manera correcta?
Tenga en cuenta que no hago $ bar para convertirme en propiedad de $ foo, es decir, no $ foo-> bar-> foobar
No hay una función incorporada para copiar todas las propiedades de un objeto a otro.
La forma en que lo haces es probablemente la más simple. Una alternativa para proporcionar la clase de $ foo con un método __get que devuelve la propiedad directamente desde $ bar.
Prueba este código
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
Si $ bar tiene todas las propiedades de $ foo, entonces es un Foo. Por lo tanto, tu clase de Bar debería extenderse (heredar de) Foo. (¡O viceversa, si confundí tus nombres!)
Si no desea utilizar la herencia por algún motivo, puede mantener un objeto dentro del otro y redirigir llamadas a las propiedades del otro desde el objeto externo dinámicamente a través de métodos mágicos como __get () y __set (consulte aquí )