方案:从数据库中获取电子邮件模板,并循环访问收件人列表,为每个收件人个性化电子邮件.
我的电子邮件模板作为嵌套对象返回.它可能看起来像这样:
object(stdClass) {
["title"] => "Event Notification"
["sender"] => "notifications@mysite.com"
["content"] => object(stdClass) {
["salutation"] => "Dear %%firstname%%,"
["body"] => "Lorem ipsum %%recipient_email%% etc etc..."
}
}
Run Code Online (Sandbox Code Playgroud)
然后我遍历收件人,将此$ email对象传递给personalize()函数:
foreach( $recipients as $recipient ){
$email_body = personalise( $email, $recipient );
//send_email();
}
Run Code Online (Sandbox Code Playgroud)
当然,问题是我需要通过引用传递$ email对象以便它替换个性化标记 - 但是如果我这样做,原始对象就会被更改,不再包含个性化标记.
据我所知,克隆在这里不会帮助我,因为它只会创建一个浅拷贝:电子邮件对象内的内容对象不会被克隆.
我已经读过关于使用unserialize(序列化($ obj))来解决这个问题 - 但是我读过的所有内容都说这是一个很大的性能影响.
所以,两个人最后得到了我的两个问题:
pow*_*tac 24
您可以__clone()
在电子邮件类中添加方法.当通过clone()克隆此类的实例时会自动调用.在此方法中,您可以手动添加模板.
例:
class email {
__clone() {
$this->template = new template();
}
}
Run Code Online (Sandbox Code Playgroud)
.
unserialize(serialize($object)); // would be another solution...
Run Code Online (Sandbox Code Playgroud)
Mat*_*oli 13
另一个更通用和强大的解决方案:MyCLabs\DeepCopy.
它有助于创建深层复制而不必重载__clone
(如果你有很多不同的对象,这可能是很多工作).
归档时间: |
|
查看次数: |
14984 次 |
最近记录: |