我想从类中获取静态方法并将其复制到变量中。
这是一个不工作的例子来说明我的问题:
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()将其转换,但这太反常了。
用闭包把它包起来。
$lamda = function($argument){return foo::bar($argument);};
或者你可以试着这样写
function staticMethodToClosure($class, $method) {
return function($argument)use($class, $method){return $class::$method($argument);};
}
格式为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