【问题标题】:How to pass object context to an anonymous function?如何将对象上下文传递给匿名函数?
【发布时间】:2011-09-13 21:47:58
【问题描述】:

有没有办法将对象上下文传递给匿名函数$this 作为参数传递?

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();

【问题讨论】:

    标签: php scope anonymous-function


    【解决方案1】:

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

    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),因此您将无法访问私有成员和受保护成员。

    【讨论】:

    • 注意:PHP v5.4 现在允许在匿名函数中使用$this
    猜你喜欢
    • 2012-10-28
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多