PHP tief Klon-Objekt
Szenario: abrufen eines E-Mail-Vorlage aus der Datenbank, und eine Schleife durch eine Liste von Empfängern, die Personalisierung der E-Mail für jeden.
Meine E-Mail-Vorlage zurück, wie eine verschachtelte Objekt. Es sieht ein wenig so aus:
object(stdClass) {
["title"] => "Event Notification"
["sender"] => "[email protected]"
["content"] => object(stdClass) {
["salutation"] => "Dear %%firstname%%,"
["body"] => "Lorem ipsum %%recipient_email%% etc etc..."
}
}
Dann habe ich eine Schleife durch den Empfänger übergeben das $Mail-Objekt zu einem Personalisieren () - Funktion:
foreach( $recipients as $recipient ){
$email_body = personalise( $email, $recipient );
//send_email();
}
Das Problem ist natürlich, dass ich mich übergeben müssen das $Mail-Objekt über eine Referenz, um für Sie zu ersetzen, die Personalisierungs-tags - aber wenn ich das mache, das ursprüngliche Objekt verändert wird und nicht mehr enthält, die Personalisierungs-tags.
So wie ich das verstehe, clone nicht mir hier helfen, denn es wird nur eine flache Kopie: das content-Objekt in der E-Mail-Objekt nicht geklont werden.
Ich gelesen habe, über die erste Runde dieses mit unserialize(serialize($obj)) - aber alles, was ich gelesen habe, sagt, das ist eine große Leistung Treffer.
So, zwei endlich meine zwei Fragen:
- Ist unserialize(serialize($obj)) eine vernünftige Lösung hier?
- Oder werde ich über diese ganze Sache falsch? Gibt es einen anderen Weg, dass ich
können generieren Sie personalisierte Kopien des E-Mail-Objekt?
InformationsquelleAutor Wintermute | 2012-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man hinzufügen, eine
__clone()
Methode, um Ihre E-Mail-Klasse. Die wird automatisch aufgerufen, wenn eine Instanz dieser Klasse ist geklont per clone(). In dieser Methode können Sie manuell fügen Sie die Vorlage.Beispiel:
.
InformationsquelleAutor powtac
Anderen mehr generische und leistungsfähige Lösung: MyCLabs\DeepCopy.
Hilft es, eine Tiefe Kopie, ohne zu überlasten
__clone
(das kann eine Menge Arbeit sein, wenn Sie eine Menge von verschiedenen Objekten).Hervorragende und elegante Lösung, danke
InformationsquelleAutor Matthieu Napoli