1

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

这是说明我的问题的非工作示例:

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() 对其进行转换,但这太反常了。

4

2 回答 2

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
于 2013-05-30T15:02:05.917 回答
0

只需将其包裹起来即可。

$lamda = function($argument){return foo::bar($argument);};

或者你可以尝试使用这样的东西

function staticMethodToClosure($class, $method) {
    return function($argument)use($class, $method){return $class::$method($argument);};
}
于 2013-05-30T14:46:18.047 回答