在匿名函数中使用变量,该函数在其他地方定义

w00*_*w00 11 php closures anonymous-function

在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' );
Run Code Online (Sandbox Code Playgroud)

我正在做的是我创建一个anonymous function并存储在变量中.我将该变量传递给类的方法,这是我想要运行匿名函数的地方.

但我不能使用use()关键字$argmethod这种方式获取参数.因为匿名函数是在...之外声明的method.

但我真的需要一种方法来从运行匿名函数的方法中获取变量.当匿名函数在其他地方声明时,有没有办法做到这一点?

Gor*_*don 19

该点use的关键字是在从父范围的特定环境状态继承/关闭到关闭时,它的定义,例如,

$foo = 1;

$fn = function() use ($foo) {
    return $foo;
};

$foo = 2;

echo $fn(); // gives 1
Run Code Online (Sandbox Code Playgroud)

如果您希望$foo稍后关闭,请稍后定义闭包,或者如果您希望$foo始终是当前值(2),则将其$foo作为常规参数传递.

  • 你应该提到它被称为"Lexical Scoping".所有现代编程语言都使用词法范围. (2认同)