在匿名回调中使用'self'?

时间:2011-07-10 22:56:30

标签: php anonymous-function

我想通过回调函数从另一个上下文中调用protected static方法,这是一个人为的例子:

class Foo {

    protected static function toBeCalled() { }

    public static function bar() {
        functionThatAcceptsACallback(function () {
            self::toBeCalled();
        });
    }

}

这在PHP 5.3中是否可行?我找不到办法让它发挥作用......

1 个答案:

答案 0 :(得分:8)

It's not possible,但它将在5.4中,并且在闭包中支持$this

  

添加了封闭$这个支持。 (STA)的

Reference

修改

这适用于5.4alpha1。

    class A
    {

        private function y()
        {
            print "y".PHP_EOL;
        }

        static private function z()
        {
            print "z".PHP_EOL;
        }

        function x()
        {
            return function() {
                $this->y();
                self::z();
            };
        }

    }

    $class = new A();

    $closure = $class->x();

    $closure();

    /*
    Output:
    y
    z
    */