2011-03-04 8 views
33

私は自分のオブジェクトの1つに再帰的ラムダ関数を持っており、オブジェクトのmysqli接続にアクセスする必要があります。この試みラムダ関数から親オブジェクトにアクセスするには?

$recfunc = function($id, $name) use($this) { 
不合理な致命的なエラーが発生し

Fatal error: Cannot use $this as lexical variable in C:\Users\Codemonkey1991\Desktop\workspace\melior\objects\databasemanager.php on line 88

は、誰も私にいくつかのポインタを与えることができますか?


編集:コンテキストを明確にするために、私はこのラムダ関数を別の関数の中に作成しようとしています。

答えて

50

のクロージャはそれ自身オブジェクトであるので、あなたは次のように、ローカル変数に$thisを割り当てる必要があります:

$host = $this; 
$recfunc = function($id, $name) use ($host) { ... 
+1

ちょっと、ちょっと質問があります。関数を呼び出して、自分自身を呼び出す方法はありますか? – Hubro

+4

'$ recfunc = function($ id、$ name); $ RECFunc($ id、$ name);を返すならば、($ host、&$ recfunc){ } ' –

+3

このエラーに関するbugs.php.netレポートをチェックすると、この機能がPHP 5.4に追加されました。 –

4

$thisへの参照が明示的にラムダ関数に渡す必要はありません。

class Foo { 
    public $var = ''; 

    public function bar() { 
     $func = function() { 
      echo $this->var; 
     }; 
     $func(); 
    } 
} 

$foo = new Foo(); 
$foo->var = 'It works!'; 
$foo->bar(); // will echo 'It works!' 
関連する問題