【发布时间】:2011-09-07 20:13:27
【问题描述】:
This user asked a similar question 但在答案中没有可行的解决方案,所以这里是重新讨论这个话题。
我希望以简洁的方式从自定义异常发送电子邮件。我可以通过自定义 error_handler 中的普通旧错误轻松做到这一点,但是对于扩展的异常,我有点难过。
主要问题是我依靠 Zend_Mail 来实现透明的跨平台邮件、用于 gmail 帐户使用的简单 smtp/ssl 配置以及许多其他好东西。我想在自定义异常中访问我的 Zend_Mail 对象。静态调用并不是我真正愿意使用的选项,尽管在自定义异常中使用 3rd 方对象似乎是最容易的。下面是异常基类的构造函数:
public function __construct($message = null, $code = 0,
Exception $previous = null);
我认为目前唯一可能值得的解决方案是在扩展异常类中为邮件程序对象添加一个参数,但我不想要求所有子类都传入邮件程序对象。这个想法可能是这个邮件对象。最好是可选的依赖项。
__construct 签名将变为:
public function __construct($mailobj = null, $message = null, $code = 0,
Exception $previous = null);
注意参数的顺序,只需要$code,它在签名的中间!这提出了另一个问题,但那是另一天。我今天的问题是,是否有人对如何处理自定义异常类中的依赖项有想法/建议? 请记住,我们的目标是可测试的代码。
另一个简单的选择是将邮件代码放在一个 catch 块中,但在我看来,这违背了使用自定义异常的目的,因为这个类的客户端现在必须考虑在所有 catch 块中添加邮件代码。
【问题讨论】:
标签: php