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

Posted

技术标签:

【中文标题】如何从 lambda 函数访问父对象?【英文标题】:How to access parent object from lambda functions? 【发布时间】:2011-07-08 12:17:21 【问题描述】:

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

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

产生了一个不合理的致命错误

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

谁能指点一下?


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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

嘿,还有一个问题:我将如何让函数调用自身? $recfunc = function($id, $name) use ($host, &$recfunc) if (FOO) return $recfunc($id, $name); 通过检查 bugs.php.net 关于此错误的报告,此功能已添加到 PHP 5.4。

以上是关于如何从 lambda 函数访问父对象?的主要内容,如果未能解决你的问题,请参考以下文章