如何从lambda函数访问父对象?

时间:2011-03-04 01:55:23

标签: php class function lambda closures

我的一个对象中有一个递归的lambda函数,它需要访问对象的mysqli连接。这种尝试

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

产生了不合理的致命错误

  

致命错误:无法在第88行的C:\ Users \ Codemonkey1991 \ Desktop \ workspace \ melior \ objects \ databasemanager.php中将$ this用作词法变量

有人可以给我一些指示吗?


编辑:为了澄清上下文,我试图在另一个函数中创建这个lambda函数。

2 个答案:

答案 0 :(得分:50)

因为闭包本身就是对象,所以需要将$this分配给局部变量,例如:

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

答案 1 :(得分:4)

$this的引用不需要显式传递给lambda函数。

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