将类的静态函数存储在变量中

时间:2014-09-09 21:50:44

标签: php anonymous-function

在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中或简单地将它作为函数对象引用?

2 个答案:

答案 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());
};

?>

这是睾丸,完美无缺。