我想从类中获取静态方法并将其复制到变量中。
这是说明我的问题的非工作示例:
class foo
{
public static function bar($argument){ return 2*$argument; }
}
$class = new ReflectionClass('foo');
// here is no ReflectionMethod::getClosure() method in reality
$lambda = $class->getMethod('bar')->getClosure();
echo $lambda(3);
所以我的问题:这是否可以通过任何正常的方式?我现在只找到一种方法。我可以解析源文件,从中获取方法源并使用create_function()进行转换,但它太不正常了。
答案 0 :(得分:0)
用封口包裹它。
$lamda = function($argument){return foo::bar($argument);};
或者你可以尝试使用这样的东西
function staticMethodToClosure($class, $method) {
return function($argument)use($class, $method){return $class::$method($argument);};
}
答案 1 :(得分:0)
格式为array($className, $methodName)
的数组可作为静态方法调用调用,因此这可能对您有用。
class foo
{
public static function bar($argument){ return 2*$argument; }
public static function getStaticFunction($arg){
return array("foo", $arg);
}
}
$a = foo::getStaticFunction("bar");
echo $a(5); // echos 10