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

时间:2013-05-30 14:41:28

标签: php reflection 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()进行转换,但它太不正常了。

2 个答案:

答案 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