我的一个对象中有一个递归的lambda函数,它需要访问对象的mysqli连接。这种尝试
$recfunc = function($id, $name) use($this) {
产生了不合理的致命错误
致命错误:无法在第88行的C:\ Users \ Codemonkey1991 \ Desktop \ workspace \ melior \ objects \ databasemanager.php中将$ this用作词法变量
有人可以给我一些指示吗?
编辑:为了澄清上下文,我试图在另一个函数中创建这个lambda函数。
答案 0 :(得分:50)
因为闭包本身就是对象,所以需要将$this
分配给局部变量,例如:
$host = $this;
$recfunc = function($id, $name) use ($host) { ...
答案 1 :(得分:4)
$this
的引用不需要显式传递给lambda函数。
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!'