2011-06-13 103 views
9

有沒有辦法將對象上下文傳遞給匿名函數沒有作爲參數傳遞$this如何將對象上下文傳遞給匿名函數?

class Foo { 
    function bar() { 
     $this->baz = 2; 
     # Fatal error: Using $this when not in object context 
     $echo_baz = function() { echo $this->baz; }; 
     $echo_baz(); 
    } 
} 
$f = new Foo(); 
$f->bar(); 

回答

10

您可以指定$this一些變量,然後使用use關鍵字來傳遞這個變量的功能,定義函數的時候,雖然我不知道這是否是更容易使用。總之,這裏是一個例子:

class Foo { 
    function bar() { 
     $this->baz = 2; 
     $obj = $this; 
     $echo_baz = function() use($obj) { echo $obj->baz; }; 
     $echo_baz(); 
    } 
} 
$f = new Foo(); 
$f->bar(); 

值得注意的是$obj將被視爲標準的對象(而不是作爲$this),所以您將無法訪問private和protected成員。

+4

注意:PHP v5.4現在允許在匿名函數中使用'$ this'。 – lifo 2013-05-30 13:08:11

相關問題