2010-07-22 6 views
5

Possible en double:
What is the best method to merge two PHP objects?Comment fusionner deux objets?

je un objet, foo $, ce qui a des méthodes et des propriétés déjà définies et un autre objet, barre de $, ce qui est juste un ensemble de propriétés . Je veux fusionner l'intégralité de $ bar en $ foo de sorte que toutes les propriétés de $ bar deviennent des propriétés de $ foo. Donc, si auparavant j'avais $ bar-> foobar, je devrais pouvoir utiliser $ foo-> foobar par la suite.

En ce moment, je fais ce qui suit:

foreach($bar as $key => $value) { 
    $foo->$key = $value; 
    } 

Cependant, si j'utilise des tableaux, je voudrais juste faire une des opérations suivantes:

$foo += $bar; 

$foo = array_merge($foo, $bar); 

Y at-il une manière similaire de le faire avec des objets ou est-ce que je le fais déjà le bon chemin?

S'il vous plaît noter que je ne suis pas ce que $ bar à devenir lui-même une propriété de $ foo-à-dire non foo- $> bar-> foobar

Répondre

3

Si la barre de $ a toutes les propriétés de foo $, alors il est un Foo . Ainsi, votre classe Bar devrait étendre (hériter de) Foo. (Ou vice versa, si mes noms sont confondus!)

Si vous ne voulez pas utiliser l'héritage pour une raison quelconque, vous pouvez garder un objet dans l'autre et rediriger les appels aux propriétés de l'autre à partir de l'objet externe dynamiquement via des méthodes magiques comme __get() et __set (voir here)

0

Il n'y a pas de fonction intégrée pour copier toutes les propriétés d'un objet vers un autre.

La façon dont vous le faites est probablement la plus simple. Une alternative pour fournir à la classe de $ foo avec une méthode __get qui renvoie la propriété directement à partir de $ bar.

15

Essayez ce code

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 
+0

Ceci est la réponse, sûrement? –

+1

Il convient de noter que cette méthode ne fonctionne que pour les propriétés, pas les méthodes sur la version php <= 5.4 autant que je sache. – PowerAktar

+0

Est-il possible d'ajouter un objet, de sorte que '$ obj' contienne à la fois' $ obj' et '$ obj2'? – Moseleyi