Использование «я» в анонимном обратном вызове? - PullRequest
6 голосов
/ 11 июля 2011

Возьмите надуманный пример, где я хочу вызвать метод protected static из другого контекста через функцию обратного вызова:

class Foo {

    protected static function toBeCalled() { }

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

}

Возможно ли это в PHP 5.3?Я не мог найти способ заставить это работать ...

1 Ответ

8 голосов
/ 11 июля 2011

Это невозможно , но будет в версии 5.4 вместе с поддержкой $this в закрытии.

Добавлено закрытие $ этой поддержки назад. (Стас)

Ссылка

Редактировать

Это работает в 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
    */
...