Передача переменной переменная в замыкание вызывает ошибку разбора? - PullRequest
0 голосов
/ 25 декабря 2018

Я только что заметил, что если вы попытаетесь поместить переменную переменную в список use замыкания, она выдаст ошибку разбора.Пример кода:

foreach ($array as $key => $item) {
    $$key = $item->something;
    $this->doSomething($key, function ($param) use ($item, $$key) {
        $param->foo($$key);
    });
}

Ошибка разбора:

Ошибка разбора: синтаксическая ошибка, неожиданный '$', ожидаемый '&' или переменная (T_VARIABLE) в

Что-то я здесь не так делаю?Почему бы не позволить мне передать переменную переменную?

Если я сохраню значение переменной переменной в другой переменной, я могу передать его обычно через use, но это не оптимально для моего реального случая.

1 Ответ

0 голосов
/ 25 декабря 2018

Вы говорите, что не хотите сохранять значение в другой переменной.Но как насчет сохранения ссылки на переменную?Это должно быть функционально эквивалентно вашему коду.

foreach ($array as $key => $item) {
    $$key = $item->something;
    $otherVar = &$$key;
    $this->doSomething($key, function ($param) use ($item, $otherVar) {
        $param->foo($otherVar);
    });
}

Если это не работает в «вашем реальном случае», пожалуйста, уточните пример кода или объясните, почему.

...