场景:从数据库中获取电子邮件模板,并循环遍历收件人列表,为每个收件人定制电子邮件。
我的电子邮件模板被返回为一个嵌套对象。它可能看起来像这样:
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对象以替换个性化标签,但如果这样做,原始对象将被更改并且不再包含个性化标签。
据我所知,克隆(clone)在这里无法帮助我,因为它只会创建一个浅层副本:邮件对象中的内容对象不会被克隆。
我已经阅读了有关使用unserialize(serialize($obj))解决此问题的方法 - 但我读到的所有内容都说这会对性能造成很大的影响。
所以,最终有两个问题:
- 在这里使用unserialize(serialize($obj))是合理的解决方案吗?
- 还是我整个想法有误?是否有其他方法可以生成该电子邮件对象的个性化副本?