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

发布于 2024-10-20 08:59:22 字数 363 浏览 3 评论 0原文

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

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

产生了不合理的致命错误

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

有人能给我一些指示吗?


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

I have a recursive lambda function in one of my objects, and it needs to access the object's mysqli connection. This attempt

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

Produced an unreasonable fatal error

Fatal error: Cannot use $this as lexical variable in C:\Users\Codemonkey1991\Desktop\workspace\melior\objects\databasemanager.php on line 88

Could anyone give me a few pointers?


Edit: Just to clarify context, I'm trying to create this lambda function inside another function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风渺 2024-10-27 08:59:22

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

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

Because closures are themselves objects, you need to assign $this to a local variable, like:

$host = $this;
$recfunc = function($id, $name) use ($host) { ...
贵在坚持 2024-10-27 08:59:22

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

The reference to $this does not need to be explicitly passed to the lambda function.

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!'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文