如何从 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 存储桶时会被拒绝访问?