我有课
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");
}
关于php - 如何将 PHP 闭包(lambda 函数)保存到 $this->var 中并稍后从同一类的另一个方法调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873820/