簡體   English   中英

如何將 PHP 閉包(lambda 函數)保存到 $this->var 中並稍后從同一類的另一個方法中調用它?

[英]How to save a PHP closure(lambda function) into $this->var and call it later from another method of the same class?

我有一堂課

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");
}

在這里,您還有其他選擇: 如何調用作為類變量的閉包?

基本上:

    1. 強制調用__invoke魔術方法:

      $myInstance = new 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); } }

嘗試

public function DoSomething()
{
    call_user_func( $this->someVar, 'test');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM