场景:从数据库中获取电子邮件模板,并遍历收件人列表,为每个收件人个性化电子邮件。
我的电子邮件模板作为嵌套对象返回。它可能看起来像这样:
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)) 解决这个问题的文章——但我读到的所有内容都表明这是一个很大的性能打击。
所以,两个终于解决了我的两个问题:
- unserialize(serialize($obj)) 在这里是一个合理的解决方案吗?
- 还是我把这整件事都搞错了?是否有其他方法可以生成该电子邮件对象的个性化副本?