Использовать переменную по ссылке в стрелочной функции

В PHP 7.4 появились функции со стрелками. Кроме того, была введена неявная привязка области действия по значению, которая устраняет необходимость в ключевом слове use.

Теперь, если мы хотим использовать переменную вне области действия замыкания по ссылке с обычной анонимной функцией, мы должны сделать это:

$num = 10;
call_user_func(function() use (&$num) {
$num += 5;
});
echo $num; // Output: 15

Но с помощью функции стрелки это кажется невозможным

$num = 10;
call_user_func(fn() => $num += 5);

echo $num; // Output: 10

Итак, как использовать переменную $num по ссылке?


person Rain    schedule 28.11.2019    source источник
comment
Я думаю, вам придется передать его как аргумент, иначе он не будет виден в области функций. Хотя я не уверен, как это будет работать на практике, так что это может быть невозможно.   -  person Qirel    schedule 28.11.2019
comment
Я предполагаю, что это невозможно.   -  person u_mulder    schedule 28.11.2019
comment
Отвечает ли это на ваш вопрос? Переписывание анонимной функции в php 7.4   -  person Dharman    schedule 28.11.2019


Ответы (1)


Читая документацию об этом, там говорится...

Привязка переменных по значению
Как уже упоминалось, стрелочные функции используют привязку переменных по значению. Это примерно эквивалентно выполнению use($x) для каждой переменной $x, используемой внутри стрелочной функции. Привязка по значению означает, что невозможно изменить какие-либо значения из внешней области:

$x = 1; 
$fn = fn() => $x++; // Has no effect 
$fn(); 
var_dump($x); // int(1)

Так что банкомат невозможен.

person Nigel Ren    schedule 28.11.2019