所以我不确定我需要向你们展示什么,但如果你们需要更多的代码,请不要犹豫,尽管问我:
这个方法将在我们的应用程序中设置Zend的initMailer:
protected function _initMailer()
{
if ('testing' !== APPLICATION_ENV) {
$this->bootstrap('Config');
$options = $this->getOptions();
$mail = new Zend_Application_Resource_Mail($options['mail']);
}elseif ('testing' === APPLICATION_ENV) {
//change the mail transport only if dev or test
if (APPLICATION_ENV <> 'production') {
$callback = function()
{
return 'ZendMail_' . microtime(true) .'.tmp';
};
$mail = new Zend_Mail_Transport_File(
array('path' => '/tmp/mail/',
'callback'=>$callback
)
);
Zend_Mail::setDefaultTransport($mail);
}
}
return $mail;
}
你可以看到内部的闭包。当我运行任何使用这段代码的测试时,我会得到:
Exception: Serialization of 'Closure' is not allowed
因此,与此“封闭”相关的所有测试均失败。因此,我在这里询问大家应该怎么做。
为了澄清上述内容,我们所做的一切就是说,我们发送的任何电子邮件都希望将有关该电子邮件的信息存储在位于/tmp/mail/目录中的文件夹中。
function() { /* do stuff */ }
的闭包会在内部转换为Closure
类的一个实例,在很多方面都类似于标准对象,函数体中的代码成为了内部“方法”。就像任何其他对象一样,当你将其序列化时,唯一会被序列化的是属性,而这些属性在闭包的上下文中没有意义。因此,禁止对闭包进行序列化。 - DaveRandomfunction() use(&$something) {}
,并引用了来自父级作用域的变量,会发生什么情况。这将是完全不可能进行序列化的,因为在反序列化时,被引用的变量将不存在。 - DaveRandom