2010-07-22 41 views
5

Eventuali duplicati:
What is the best method to merge two PHP objects?Come unire due oggetti?

ho un oggetto, $ pippo, che ha alcuni metodi e proprietà già definite e un altro oggetto, $ bar, che è solo un insieme di proprietà . Voglio unire l'intera $ bar in $ foo in modo che tutte le proprietà di $ bar diventino proprietà di $ pippo.

Quindi se prima avevo, $ bar-> foobar, in seguito dovrei essere in grado di usare $ foo-> foobar.

Al momento, sto facendo il seguente:

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

Tuttavia, se fossi l'utilizzo di matrici, vorrei solo fare una delle seguenti:

$foo += $bar; 

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

C'è un modo simile di fare questo con gli oggetti o sto facendo già nel modo giusto?

Si prega di notare che io non quello che $ bar a se stesso diventare una proprietà di $ pippo cioè non $ foo-> bar-> foobar

risposta

3

Se $ bar ha tutte le proprietà di $ foo, allora è un Foo . Pertanto, la tua classe Bar dovrebbe estendere (ereditare da) Foo. (O viceversa, se ho confuso i vostri nomi!)

Se non si desidera utilizzare l'ereditarietà per qualche motivo, è possibile mantenere un oggetto all'interno dell'altro e reindirizzare le chiamate alle proprietà dell'altro dall'oggetto esterno in modo dinamico tramite metodi magici come __get() e __set (vedere here)

0

Non esiste alcuna funzione incorporata per copiare tutte le proprietà di un oggetto su un altro.

Il modo in cui lo fai è probabilmente il più semplice. Un'alternativa per fornire la classe di $ pippo con un metodo __get che restituisce la proprietà direttamente da $ bar.

15

Prova questo codice

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

Questa è la risposta, no? –

+1

Va notato che questo metodo funziona solo per le proprietà, non per i metodi nella versione php <= 5.4 per quanto ne so. – PowerAktar

+0

È possibile aggiungere un oggetto, in modo che '$ obj' contenga sia' $ obj' che '$ obj2'? – Moseleyi