如何从 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 函数访问父对象?的主要内容,如果未能解决你的问题,请参考以下文章

aws 如何从生产环境中的 lambda 函数访问 ECS 服务

当从 s3 获取对象时,aws lambda 函数被拒绝访问

为啥我的 lambda 函数在尝试访问 S3 存储桶时会被拒绝访问?

使用 http 端点访问 lambda 中的 HTTP 请求(标头、查询字符串、cookie、正文)对象

如何从函数中访问父变量

从 Lambda 函数内部访问 AWS CloudFormation ARN