如何将PHP闭包(lambda函数)保存到$this-> var中,并稍后从同一类的另一个方法调用它?
作者:互联网
大家好,我想知道如何执行以下操作:
我有一堂课
class SomeClass {
private $someVar;
public function Init($func) {
$this->someVar = $func;
}
public function DoSomething() {
$this->someVar("asdasdasd");
}
}
$obj = new SomeClass();
$obj->Init(function ($param){var_dump($param);});
$obj->DoSomething();
当我调用DoSomething方法时,我得到一个错误,即SomeClass :: someVar()是未定义的方法.但是当我使用调试器时,我看到它是一个关闭对象.如果我将函数保存到局部变量(不带$this的$someVar)中,并在Init()函数中调用它,则效果很好.但是我不想在那里调用该函数.我想稍后再打.
即使我将其保存到$this-> someVar中并在相同范围内调用它也不起作用.
解决方法:
也许您应该简单地尝试一下:
public function DoSomething()
{
$tmpVar = $this->someVar;
$tmpVar("asdasdasd");
}
或者,如果您愿意,可以这样:
public function DoSomething()
{
call_user_func($this->someVar, "asdasdasd");
}
标签:closures,php,lambda 来源: https://codeday.me/bug/20191101/1986422.html