Языковая конструкция use
захватывает / копирует переданную переменную во время определения анонимной функции. Если вы измените эту переменную после определения функции, функция не заметит ее:
$foo = 'baz';
$f1 = function() use ($foo) {
echo $foo;
};
$foo = 'boo';
$f1(); // baz
Однако, если переменная является объектом, это правило не применяется, так как PHP передает объекты по ссылке *, всегда (* прочитайте комментарий Джето ниже для более точного описания):
$foo = new StdClass();
$foo->bar = 'baz';
$f2 = function() use ($foo) {
echo $foo->bar;
};
$foo->bar = 'boo';
$f2(); // boo
Я думаю, причина PHP имеет use
для частичного применения функции:
function get_multiplier($factor) {
return function($num) use ($factor) {
return $num * $factor;
};
}
$multiply_by_4 = get_multiplier(4);
echo $multiply_by_4(5); // 20