代码之家  ›  专栏  ›  技术社区  ›  Dan Lugg mab

PHP闭包和隐式全局变量范围

  •  9
  • Dan Lugg mab  · 技术社区  · 15 年前

    有什么方法可以 隐含地 声明顶级变量为全局变量以用于闭包?

    例如,如果使用这样的代码:

    $a = 0; //A TOP-LEVEL VARIABLE
    
    Alpha::create('myAlpha')
        ->bind(DataSingleton::getInstance()
            ->query('c')
        )
        ->addBeta('myBeta', function($obj){
            $obj->bind(DataSingleton::getInstance()
                    ->query('d')
                )
                ->addGamma('myGamma', function($obj){
                    $obj->bind(DataSingleton::getInstance()
                            ->query('a')
                        )
                        ->addDelta('myDelta', function($obj){
                            $obj->bind(DataSingleton::getInstance()
                                ->query('b')
                            );
                        });
                })
                ->addGamma('myGamma', function($obj){
    
                    $a++; //OUT OF MY SCOPE
    
                    $obj->bind(DataSingleton::getInstance()
                            ->query('c')
                        )
                        .
                        .
                        .
    

    从如下方法调用闭包:

        public function __construct($name, $closure = null){
            $this->_name = $name;
            is_callable($closure) ? $closure($this) : null;
        }
    

    因此,在summary/tl;dr中,是否有一种方法可以隐式地将变量声明为全局变量,以便在闭包(或我认为是其他函数)中使用,而不使用 global 关键字或 $GLOBALS 超全球?

    我是在另一个论坛上开始这个话题的( http://www.vbforums.com/showthread.php?p=3905718#post3905718 )

    1 回复  |  直到 15 年前
        1
  •  32
  •   rojoca    15 年前

    ->addBeta('myBeta', function($obj) use ($a) { // ...
    

    global $a