PHP获取方法范围之外的变量


PHP get variables outside method scope

我有这个类(举个简单的例子):

<?
class Test {
  public function test1($a) {
    $gen = function() {
      $gen = function() {
        global $a; // no effect
        echo 'a='. $a; // how could i access $a from test1 parameter without passing?
      };
      $gen();
    };
    $gen();
  } 
};
$x = new Test();
$x->test1(123);

有没有一种方法可以从上一个$gen函数中的test1 paramter访问$a,而不将其传递给$gen()函数?

PHP中的匿名函数不像JavaScript那样具有隐式变量作用域,因此需要指定需要父作用域中的哪些变量。使用use语法:

$var = 123;
$fn = function() use ($var) {
    // you can use $var here
}
$fn();

另请参阅:闭包和范围

您缺少use语句。请参阅PHP关于闭包的文档中的第三个示例。

这将起作用:

<?php
class Test {
  public function test1($a) {
    $gen = function() use ($a) {
      $gen = function() use($a) {
        echo 'a='. $a; // how could i access $a from test1 parameter without passing?
      };
      $gen();
    };
    $gen();
  } 
};
$x = new Test();
$x->test1(123);