Ответ 1
Поскольку закрытие - это сами объекты, вам нужно назначить $this
локальной переменной, например:
$host = $this;
$recfunc = function($id, $name) use ($host) { ...
У меня есть рекурсивная лямбда-функция в одном из моих объектов, и ей нужно получить доступ к соединению mysqli объекта. Эта попытка
$recfunc = function($id, $name) use($this) {
Произведена необоснованная фатальная ошибка
Неустранимая ошибка: нельзя использовать $this как лексическую переменную в C:\Users\Codemonkey1991\Desktop\workspace\melior\objects\databasemanager.php в строке 88
Может ли кто-нибудь дать мне несколько указателей?
Изменить: просто для уточнения контекста я пытаюсь создать эту лямбда-функцию внутри другой функции.
Поскольку закрытие - это сами объекты, вам нужно назначить $this
локальной переменной, например:
$host = $this;
$recfunc = function($id, $name) use ($host) { ...
Ссылка на $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!'