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() 関数に渡さずに、最後の $gen 関数内の test1 パラメータから $a にアクセスする方法はありますか?

4

2 に答える 2

2

PHPの無名関数には、JavaScriptのような暗黙の変数スコープがないため、親スコープのどの変数が必要かを指定する必要があります。これは次のuse構文で行います。

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

参照:クロージャとスコープ

于 2013-02-05T04:14:18.363 に答える
2

useステートメントがありません。クロージャーに関する PHP のドキュメントの 3 番目の例を参照してください。

これはうまくいきます:

<?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 に答える