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

2022-08-30 13:58:20

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

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

产生了不合理的致命错误

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

谁能给我一些指点吗?


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


答案 1

因为闭包本身就是对象,所以你需要赋给一个局部变量,比如:$this

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

答案 2

对 的引用不需要显式传递给 lambda 函数。$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!'

推荐