Подтвердить что ты не робот

Как получить доступ к родительскому объекту из лямбда-функций?

У меня есть рекурсивная лямбда-функция в одном из моих объектов, и ей нужно получить доступ к соединению mysqli объекта. Эта попытка

$recfunc = function($id, $name) use($this) {

Произведена необоснованная фатальная ошибка

Неустранимая ошибка: нельзя использовать $this как лексическую переменную в C:\Users\Codemonkey1991\Desktop\workspace\melior\objects\databasemanager.php в строке 88

Может ли кто-нибудь дать мне несколько указателей?


Изменить: просто для уточнения контекста я пытаюсь создать эту лямбда-функцию внутри другой функции.

4b9b3361

Ответ 1

Поскольку закрытие - это сами объекты, вам нужно назначить $this локальной переменной, например:

$host = $this;
$recfunc = function($id, $name) use ($host) { ...

Ответ 2

Ссылка на $this необязательно должна быть явно передана лямбда-функции.

class Foo {
    public $var = '';

    public function bar() {
        $func = function() {
            echo $this->var;
        };
        $func();
    }
}

$foo = new Foo();
$foo->var = 'It works!';
$foo->bar(); // will echo 'It works!'