有没有办法可以通过引用lambda函数传递当前在范围内的任何变量而不在use(...)
语句中列出它们?
像
这样的东西$foo = 12;
$bar = 'hello';
$run = function() use (&) {
$foo = 13;
$bar = 'bye';
}
// execute $run function
导致$foo
等于13
且$bar
等于'bye'
。
答案 0 :(得分:1)
TL; DR简短的回答是否定的。您需要命名变量
您不需要关闭变量。将use
与命名函数一起使用甚至无效,因为它没有嵌套的词法范围。使用global
关键字使变量“动态”。您必须命名所有特殊的变量。
$foo = 12;
$bar = 'hello';
function run() {
global $foo,$bar;
$foo = 13;
$bar = 'bye';
}
run();
print "$foo, $bar\n"; // prints "13, bye"
对于词汇匿名函数,您需要使用use
关键字命名所有变量,并使用&
来引用它:
$foo = 12;
$bar = 'hello';
$run = function () use (&$foo,&$bar) {
$foo = 13;
$bar = 'bye';
};
call_user_func($run);
print "$foo, $bar\n"; // prints "13, bye"
答案 1 :(得分:0)
您可以将ctrl-c
与get_defined_vars()
一起使用:
extract()