Как передать контекст объекта анонимной функции? - PullRequest
9 голосов
/ 13 июня 2011

Есть ли способ передачи контекста объекта в анонимную функцию без передачи $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();

1 Ответ

11 голосов
/ 13 июня 2011

Вы можете присвоить $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), поэтому вы не сможете получить доступ к частным и защищеннымчлены.

...