У меня есть небольшая проблема с анонимной функцией в php. Эта функция выполняется фреймворком, который передает туда переменную. Я хотел бы переопределить эту переменную, не меняя рамки кода, это возможно в php?
Здесь код, объясняющий, что происходит. Freamwork код:
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, чтобы он использовал ссылки, но я хочу этого избежать. Есть ли решение? Вот весь код этого класса из freamwork Вот весь код этого из freamwork: https://github.com/laravel/framework/blob/5.1/src/Illuminate/Mail/Mailer.php
Я понимаю, что у вас уже есть $ сообщение объект, который вы хотели бы использовать в этом объекте Мейлер :: отправить () метод вместо объекта, который создается в Мейлер :: отправить () с $ This-> createMessage ()
Нет способа сделать внешний $ сообщение ссылка на некоторый другой объект, поскольку то, что получает ваш обратный вызов, является копией ссылки. Однако вы можете изменить объект, на который ссылается $ сообщение так что он идентичен $ ourMessage. Передайте ваше сообщение на закрытие, как вы уже сделали, а затем вместо того, чтобы делать
$message = $ourMessage;
скопируйте все, что вы установили для $ ourMessage в $ сообщение объект. Даже если вы не замените $ сообщение с $ ourMessage, Вы сделаете объекты идентичными.
Других решений пока нет …