在PHP中将静态方法转换为lambda



我想从类中获取静态方法并将其复制到变量中。

这是一个不工作的例子来说明我的问题:

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

相关内容

  • 没有找到相关文章

最新更新