异常:不允许“闭包”序列化
尝试在测试方法中使用闭包时,出现“异常:‘闭包’序列化”可能会出现“Closure' is not allowed”错误。
问题
下面的代码片段使用闭包来指定存储电子邮件的自定义文件路径:
<code class="php">protected function _initMailer() { ... elseif ('testing' === APPLICATION_ENV) { // ... $callback = function() { return 'ZendMail_' . microtime(true) .'.tmp'; }; // ... }</code>
解决方案
解决方案1:用正则函数替换闭包
用正则函数替换闭包:
<code class="php">protected function _initMailer() { ... elseif ('testing' === APPLICATION_ENV) { // ... function emailCallback() { return 'ZendMail_' . microtime(true) . '.tmp'; } $callback = "emailCallback"; // ... }</code>
解决方案 2:使用数组变量来间接调用方法
利用数组变量来间接调用方法:
<code class="php">protected function _initMailer() { ... elseif ('testing' === APPLICATION_ENV) { // ... $callback = array($this, "aMethodInYourClass"); // ... }</code>
这允许您在类中定义方法并使用数组将其传递给回调。
以上是如何在测试方法中使用闭包解决'异常:不允许序列化'闭包'”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!