2011-03-04 3 views
33

내 개체 중 하나에 재귀 람다 함수가 있으며 개체의 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

사람이 나에게 몇 가지 포인터를 제공 할 수 불합리한 치명적인 오류

를 생산?


편집 : 그냥 컨텍스트를 명확히하기 위해 다른 함수 안에이 람다 함수를 만들려고합니다. $this에 대한 참조를 명시 적으로 람다 함수에 전달 될 필요가 없다

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

답변

50

, 당신은 같은 지역 변수에 $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!' 
+1

안녕하세요, 추가 질문 : 함수 자체가 호출되도록하려면 어떻게해야합니까? – Hubro

+4

'$ recfunc = function ($ id, $ name) ($ 호스트, & $ recfunc) {if (FOO) return $ recfunc ($ id, $ name); }' –

+3

이 오류에 대한 bugs.php.net 보고서를 확인한이 기능은 PHP 5.4에 추가되었습니다. –

4

: 폐쇄 스스로 객체이기 때문에

관련 문제