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

标签 php lambda closures

我有课

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/

相关文章:

php - 循环遍历 mysqli 结果数组一次以获取所有信息

php - 我的 htaccess 文件无法加载 css

javascript - 在javascript中将函数分配给变量时识别变量

c++ - 将闭包作为参数传递给构造函数 C++

php - 字符编码错误

php - 从php构造函数获取构造参数依赖

c++ - 虚拟方法 VS std::function 成员变量在性能方面

java - Java 中 lambda 表达式的错误转换

java - 捕获 C++ lambda 表达式错误中的 JNIENV*

javascript - 在大型系统中附加事件处理程序的最佳实践