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

如何将PHP闭包(lambda函数)保存到$this->;然后从同一类的另一个方法调用它?,php,lambda,closures,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 ($p

我有一节课

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()
是未定义的方法。但是当我使用调试器时,我看到它是一个闭包对象。如果我将函数保存到一个局部变量(
$someVar
,而不使用
$this
)中,并在
Init()
函数中调用它,它就可以正常工作。但是我不想在那里调用函数。我想稍后再打


即使我将它保存到
$this->someVar
中并在同一范围内调用它,它也不起作用。

也许您应该简单地尝试一下:

public function DoSomething()
{
  $tmpVar = $this->someVar;
  $tmpVar("asdasdasd");
}
或者,如果您愿意,可以这样做:

public function DoSomething()
{
  call_user_func($this->someVar, "asdasdasd");
}

也许你应该试试这个:

public function DoSomething()
{
  $tmpVar = $this->someVar;
  $tmpVar("asdasdasd");
}
或者,如果您愿意,可以这样做:

public function DoSomething()
{
  call_user_func($this->someVar, "asdasdasd");
}
试一试

试一试


这里您还有其他选择:

基本上:

  • 强制调用magic方法:

    $myInstance=新的MyClass(); $myInstance->lambda->_invoke()

  • 或2。捕获方法调用:

    class MyClass
    {
        private $lambda;
    
        public function __construct()
        {
            $this->lambda = function() {
                echo "Hello world!\n";
            };
        }
    
        public function __call($name, $args)
        {
            return call_user_func_array($this->$name, $args);
        }
    }
    

这里您还有其他选择:

基本上:

  • 强制调用magic方法:

    $myInstance=新的MyClass(); $myInstance->lambda->_invoke()

  • 或2。捕获方法调用:

    class MyClass
    {
        private $lambda;
    
        public function __construct()
        {
            $this->lambda = function() {
                echo "Hello world!\n";
            };
        }
    
        public function __call($name, $args)
        {
            return call_user_func_array($this->$name, $args);
        }
    }
    

呼叫用户功能运行缓慢。1个变量可以工作:call\u user\u func工作缓慢。1个变量将起作用: