当在PHP中使用匿名函数时,您可以通过使用use()
关键字轻松地使用其作用域之外的变量。
在我的例子中,匿名函数已经在某个地方定义了,但是稍后(在其他地方)在类中调用。
下面的一段代码将说明这一思想:
<?php
$bla = function ( $var1 ) use ($arg)
{
echo $var1;
};
class MyClass
{
private $func;
public function __construct ( $func )
{
$this->func = $func;
}
public function test ( $arg )
{
$closure = $this->func;
$closure ( 'anon func' );
}
}
$c = new MyClass($bla);
$c->test ( 'anon func' );
我创建了一个anonymous function
并将其存储在一个变量中,然后将该变量传递给一个类的方法,这就是我想要运行 anonymous 函数的地方。
但是我不能使用use()
关键字从method
中获取$arg
参数。因为 anonymous 函数是在method
外部声明的。
但是我真的需要一种方法来从运行匿名函数的方法中获取变量。有没有一种方法可以做到这一点,当匿名函数在其他地方声明时..?
3条答案
按热度按时间0wi1tuuw1#
use
关键字的目的是在Closure * 被定义 * 时将inherit/close over a particular environment state from the parent scope放入Closure * 中,例如:如果希望
$foo
在以后某个时间点闭合,则可以稍后定义闭包,或者如果希望$foo
始终为当前值(2),则将$foo
作为常规参数传递。2lpgd9682#
FWIW,如果你使用一个
use reference
(php.net ex 3.3)和一个全局变量,你可以做到这一点,因为它使用全局变量,但只是把它放在那里:sc4hvdpw3#
在@chiliNUT answer的基础上构建,而不是将$arg设为全局变量,通过引用将其传递给MyClass构造函数:
如果要允许任意数量的使用参数: