Php 在其他地方定义的匿名函数中使用变量
在PHP中使用匿名函数时,通过使用Php 在其他地方定义的匿名函数中使用变量,php,closures,anonymous-function,Php,Closures,Anonymous Function,在PHP中使用匿名函数时,通过使用use()关键字,可以轻松地使用其范围之外的变量 在我的例子中,匿名函数已经在某个地方定义了,但是后来在类中(在其他地方)调用了 下面的代码是为了说明这个想法: <?php $bla = function ( $var1 ) use ($arg) { echo $var1; }; class MyClass { private $func; public function __c
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' );
使用
关键字的要点是在定义闭包时插入闭包,例如
如果希望以后关闭
$foo
,请稍后定义关闭,或者如果希望$foo
始终为当前值(2),将$foo
作为常规参数传递。FWIW,如果使用使用引用
(ex 3.3)和全局变量,则可以执行此操作,因为它使用全局变量,但我要说的是:
<?php
$bla = function ( $var1 ) use (&$arg)
{
return "var1:$var1, arg:$arg";
};
class MyClass
{
private $func;
public function __construct ( $func )
{
$this->func = $func;
}
public function test ( $param )
{
global $arg;
$arg=$param;
$closure = $this->func;
return $closure ( 'anon func' );
}
}
$c = new MyClass($bla);
echo $c->test ( 'bla bla' ); //var1:anon func, arg:bla bla
将其作为参数传递。@NiclasLarsson我不能这么做。因为我需要通过匿名函数
中的引用
来更改参数。我可以从test()
方法内部使用func\u get\u args
轻松获取值。然后在那里将这些值传递给匿名函数
,但这样它只会得到值的副本。我需要有一个引用
。你不能使用引用运算符(&)通过引用传递它们吗?@NiclasLarsson by reference不会使其更改范围。在OP的示例中,$arg仍然指向全局范围中的$arg。我知道OP希望闭包使用执行它的作用域中的$arg,例如MyClass::test($arg)。但也许OP可以澄清,我希望我忽略了什么。但是显然,没有其他方法可以将所需的变量作为参数传递。您应该提到它被称为“词汇作用域”。所有现代编程语言都使用词法作用域。
<?php
$bla = function ( $var1 ) use (&$arg)
{
return "var1:$var1, arg:$arg";
};
class MyClass
{
private $func;
public function __construct ( $func )
{
$this->func = $func;
}
public function test ( $param )
{
global $arg;
$arg=$param;
$closure = $this->func;
return $closure ( 'anon func' );
}
}
$c = new MyClass($bla);
echo $c->test ( 'bla bla' ); //var1:anon func, arg:bla bla