Есть ли способ передачи объектного контекста анонимной функции без передачи $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();
Вы можете назначить $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
), поэтому вы не сможете получить доступ к закрытым и защищенным членам.