laravel — переопределить аргумент анонимной функции в переполнении стека

У меня есть небольшая проблема с анонимной функцией в 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

2

Решение

Я понимаю, что у вас уже есть $ сообщение объект, который вы хотели бы использовать в этом объекте Мейлер :: отправить () метод вместо объекта, который создается в Мейлер :: отправить () с $ This-> createMessage ()

Нет способа сделать внешний $ сообщение ссылка на некоторый другой объект, поскольку то, что получает ваш обратный вызов, является копией ссылки. Однако вы можете изменить объект, на который ссылается $ сообщение так что он идентичен $ ourMessage. Передайте ваше сообщение на закрытие, как вы уже сделали, а затем вместо того, чтобы делать

$message = $ourMessage;

скопируйте все, что вы установили для $ ourMessage в $ сообщение объект. Даже если вы не замените $ сообщение с $ ourMessage, Вы сделаете объекты идентичными.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector