2011-03-04 9 views
33

Nesnelerimden birinde yinelemeli bir lambda işlevi var ve nesnenin mysqli bağlantısına erişmesi gerekiyor. Bu girişimEbeveyn nesnesine lambda işlevlerinden nasıl erişilir?

$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

kimse bana birkaç ipucu verebilir misiniz mantıksız önemli bir hatayla

Üretilen?


Düzenleme: Sadece içeriği açıklığa kavuşturmak için, bu lambda işlevini başka bir işlevin içinde oluşturmaya çalışıyorum. $this referans açıkça lamda işlevine geçirilecek gerekmez

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

cevap

50

, şöyle bir yerel değişkene $this atamanız gerekir.

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!' 
+1

Hey, sadece bir soru daha: Kendisini çağırmak için işleve sahip olmak için nasıl giderim? – Hubro

+4

'$ recfunc = işlev ($ id, $ name) kullanımı ($ host, & $ recfunc) {if (FOO) $ recfunc ($ id, $ name); } ' –

+3

Bu hata ile ilgili bir bugs.php.net raporunu incelediğinizde, bu özellik PHP 5.4'e eklenmiştir. –

4

: kapanışları kendileri nesneler olduğundan

İlgili konular