覆盖 php 中的匿名函数参数

Override anonymous function argument in php

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

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

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

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 的 class 的完整代码 这是来自 freamwork 的完整代码:https://github.com/laravel/framework/blob/5.1/src/Illuminate/Mail/Mailer.php

我知道您已经有一个 $message 对象,您希望在 Mailer::send()[=28] 中使用该对象=] 方法而不是在 Mailer::send() 中使用 $this->createMessage()

创建的对象

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

$message = $ourMessage;

将您为 $ourMessage 设置的任何内容复制到 $message 对象。即使您不会将 $message 替换为 $ourMessage,您也会使对象相同。