编程语言
首页 > 编程语言> > 如何将PHP闭包(lambda函数)保存到$this-> var中,并稍后从同一类的另一个方法调用它?

如何将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