在PHP中,我有一个接受函数对象的类,并在一个线程中调用该函数:see the answer to this question。
它适用于匿名函数,但是,我想将此功能与不同类的静态函数一起使用:
$thThread = new FunctionThreader(OtherClass::static_function, $aParams);
这会引发错误Undefined class constant static_function on line x
我试过了:
$fFunction = OtherClass::static_function;
$thThread = new FunctionThreader($fFunction, $aParams);
我得到同样的错误。
那么无论如何都要将这个静态函数存储到$fFunction
中或简单地将它作为函数对象引用?
答案 0 :(得分:2)
在PHP中,您通常会使用callback:
$callback = array('ClassName', 'methodName');
$thThread = new FunctionThreader($callback, $aParams);
如果FunctionThreader::__construct()
只接受Closure
且您对其实施没有任何影响,那么您可以将静态函数调用包装在Closure
中:
$closure = function() { return ClassName::methodName(); };
$thThread = new FunctionThreader($closure, $aParams);
答案 1 :(得分:0)
您可以定义一个调用静态函数的lambda函数。或者只是将函数名称存储为该变量中的字符串。您还必须为从变量调用函数的类实现处理程序代码。
资源: http://php.net/manual/en/function.forward-static-call-array.php
http://ee1.php.net/manual/en/function.func-get-args.php
匿名函数示例:
<?php
$function = new function(){
return forward_static_call_array(['class', 'function'], func_get_args());
};
?>
这是睾丸,完美无缺。