覆盖php中的匿名函数参数

时间:2015-08-02 17:36:00

标签: php laravel laravel-5 anonymous-function anonymous-types

我在php中使用匿名函数有点问题。该函数由框架执行,框架在那里传递变量。我想在不更改框架代码的情况下覆盖此变量,是否可以在PHP中? 这里的代码解释了发生了什么。 Freamwork代码:

protected function callMessageBuilder($callback, $message)
{
    if ($callback instanceof Closure)
    {
        return call_user_func($callback, $message);
    }
}

这是我的代码,带有一个匿名函数,其中包含由freamwork传递的变量$ message。我想用以前准备的变量替换它。

public function sendEmail(){
    $ourMessage = $this->getMessage();
    \Mail::send($this->getTemplate(), $this->getData(), function ($message) use ($ourMessage) {
        $message = $ourMessage;
        //This change is not visible in freamwork code callback
    });
}

我知道如何重写freamwork代码以便它使用引用,但我想避免这种情况。有什么解决方案吗?以下是freamwork中此类的完整代码。以下是freamwork的完整代码:https://github.com/laravel/framework/blob/5.1/src/Illuminate/Mail/Mailer.php

1 个答案:

答案 0 :(得分:1)

我们了解到您已经有一个 $ message 对象,您希望该对象在 Mailer :: send()方法中使用,而不是使用 $ this-> createMessage()

Mailer :: send()中创建的对象

无法将外部 $ message 引用指向某个其他对象,因为您的回调获取的是引用的副本。但是,您可以修改 $ message 引用的对象,使其与 $ ourMessage 相同。像你一样把你的信息传递给关闭,然后而不是做

$message = $ourMessage;

将您为 $ myMessage 设置的内容复制到 $ message 对象。即使您不能用 $ myMessage 替换 $ message ,您也会使对象完全相同。