如何将对象上下文传递给匿名函数

如何将对象上下文传递给匿名函数

本文介绍了如何将对象上下文传递给匿名函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有一种方法可以将对象上下文传递给匿名函数而无需$this作为参数传递?

Is there a way of passing object context to an anonymous function without passing $this as an argument?

class Foo {
    function bar() {
        $this->baz = 2;
        # Fatal error: Using $this when not in object context
        $echo_baz = function() { echo $this->baz; };
        $echo_baz();
    }
}
$f = new Foo();
$f->bar();

推荐答案

您可以在定义函数时将$this分配给某个变量,然后使用use关键字将此变量传递给函数,尽管我不确定如果更容易使用.无论如何,这是一个例子:

You can assign $this to some variable and then use use keyword to pass this variable to function, when defining function, though I'm not sure if it is easier to use. Anyway, here's an example:

class Foo {
    function bar() {
        $this->baz = 2;
        $obj = $this;
        $echo_baz = function() use($obj) { echo $obj->baz; };
        $echo_baz();
    }
}
$f = new Foo();
$f->bar();

值得注意的是,$obj将被视为标准对象(而不是$this),因此您将无法访问私有成员和受保护成员.

It is worth noting that $obj will be seen as standard object (rather than as $this), so you won't be able to access private and protected members.

这篇关于如何将对象上下文传递给匿名函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-23 21:43