[英]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");
}
在這里,您還有其他選擇: 如何調用作為類變量的閉包?
基本上:
強制調用__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.