2

静的変数を持つ次のクラスがあります。匿名の PHP 関数内からクラスの静的関数にアクセスするにはどうすればよいですか?

class MyClass {
  public static function MyFunction(mylocalparam){
      MyStaticClass:MyStaticMethod(function(myparam) use(mylocalparam){
         MyClass::MyFunction2(mylocalparam);
   });
  }

  private static function MyFunction2(someobject){
  }
}

匿名クラス内から関数 "MyFunction2" にアクセスできません。これを修正する方法についてアドバイスをいただけますか?

4

2 に答える 2

3

起こらない。静的関数を作成する必要がありますpublic。匿名関数は のスコープ内で実行されないため、その中に含まれるメソッドにMyClassアクセスできません。private

于 2013-03-06T13:34:44.397 に答える
1

静的に行うことはできませんが、必要に応じて、呼び出したいメソッドを type のパラメーターを介して渡すことができますcallback

クラス全体をインスタンス クラスに変更する (すべてのキーワードを削除する) 場合、匿名関数内でstatic使用して、現在のクラスの任意のメソッドを呼び出すことができます。$this

PHPマニュアルから:

クロージャーは、親スコープから変数を継承する場合もあります。

指定されたとおり:

バージョン 5.4.0 では、$this を無名関数で使用できます。

class MyClass {
  public function MyFunction($mylocalparam){
      MyStaticClass:MyStaticMethod(function($myparam) use($mylocalparam){
         $this->MyFunction2($mylocalparam);
   });
  }

  private function MyFunction2($someobject){
  }
}
于 2013-03-06T13:38:33.853 に答える