2010-07-22 11 views
5

Mögliche Duplizieren:
What is the best method to merge two PHP objects?Wie füge ich zwei Objekte zusammen?

Ich habe ein Objekt, $ foo, die einige Methoden und Eigenschaften hat bereits definiert und ein anderes Objekt, $ bar, die nur eine Reihe von Eigenschaften ist . Ich möchte die Gesamtheit von $ bar in $ foo zusammenführen, so dass alle Eigenschaften von $ bar Eigenschaften von $ foo werden.

Also wenn ich vorher $ bar-> foobar hatte, dann sollte ich $ foo-> foobar verwenden können.

Im Moment mache ich folgendes:

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

Wenn ich jedoch Arrays verwendet haben, würde ich einen der folgenden nur:

$foo += $bar; 

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

Gibt es eine ähnliche Art und Weise das mit Objekten zu tun oder mache ich es schon richtig?

Bitte beachten Sie, dass ich nicht das, was $ bar an sich eine Eigenschaft von $ foo werden also nicht foo- $> bar-> foobar

Antwort

3

Wenn $ bar hat Eigenschaften des alle $ foo, dann ist es ein Foo . Daher sollte Ihre Bar-Klasse Foo erweitern (erben von). (Oder umgekehrt, wenn ich Ihre Namen verwechselt habe!)

Wenn Sie aus irgendeinem Grund keine Vererbung verwenden möchten, können Sie ein Objekt innerhalb des anderen behalten und Aufrufe an die Eigenschaften des anderen vom äußeren Objekt umleiten dynamisch über magische Methoden wie __get() und __set (siehe here)

0

Es gibt keine integrierte Funktion, um alle Eigenschaften eines Objekts in ein anderes zu kopieren.

Die Art, wie Sie es tun, ist wahrscheinlich die einfachste. Eine Alternative zur Bereitstellung der Klasse von $ foo mit einer __get-Methode, die die Eigenschaft direkt aus $ bar zurückgibt.

15

diesen Code Versuchen

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

Dies ist die Antwort, oder? –

+1

Es sollte angemerkt werden, diese Methode funktioniert nur für Eigenschaften, nicht Methoden auf PHP-Version <= 5.4, soweit ich weiß. – PowerAktar

+0

Ist es möglich, ein Objekt anzufügen, so dass '$ obj' sowohl $ obj als auch $ obj2 enthält? – Moseleyi

Verwandte Themen