シナリオ:データベースから電子メールテンプレートをフェッチし、受信者のリストをループして、それぞれの電子メールをパーソナライズします。
私のメールテンプレートはネストされたオブジェクトとして返されます。次のようになります。
object(stdClass) {
["title"] => "Event Notification"
["sender"] => "notifications@mysite.com"
["content"] => object(stdClass) {
["salutation"] => "Dear %%firstname%%,"
["body"] => "Lorem ipsum %%recipient_email%% etc etc..."
}
}
次に、受信者をループして、この$ emailオブジェクトをpersonalise()関数に渡します。
foreach( $recipients as $recipient ){
$email_body = personalise( $email, $recipient );
//send_email();
}
もちろん、問題は、パーソナライズタグを置き換えるために、参照によって$ emailオブジェクトを渡す必要があることです。ただし、そうすると、元のオブジェクトが変更され、パーソナライズタグが含まれなくなります。
私が理解しているように、クローンは浅いコピーを作成するだけなので、ここでは役に立ちません。電子メールオブジェクト内のコンテンツオブジェクトはクローンされません。
unserialize(serialize($ obj))でこれを回避する方法について読んだことがありますが、読んだすべてのことから、これはパフォーマンスに大きな打撃を与えると言われています。
それで、2つは最終的に私の2つの質問に行き着きます:
- unserialize(serialize($ obj))はここで合理的な解決策ですか?
- それとも私はこのすべてを間違っているのでしょうか?その電子メールオブジェクトのパーソナライズされたコピーを生成する別の方法はありますか?