0

我有这个类(例如简单的一个):

<?
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 参数访问 $a 而无需将其传递给 $gen() 函数?

4

2 回答 2

2

你错过了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);
于 2013-02-05T04:13:43.137 回答
2

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

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

参见:闭包和作用域

于 2013-02-05T04:14:18.363 回答