【发布时间】:2013-05-30 14:41:27
【问题描述】:
我想从类中获取静态方法并将其复制到变量中。
这是说明我的问题的无效示例:
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() 进行转换,但这太不正常了。
【问题讨论】:
-
我不确定你是否可以使用反射:我认为你需要使用 PHP 标记器
-
我不明白这样做的目的,但是创建 lambda 函数作为
foo::bar()的包装器呢? -
想了想,我敢说应该不可能把一个类方法转换成一个lambda函数。这是没有意义的,如果有可能(或者,我们在这里谈论 php 及其所有问题......),那么事情可能真的会破裂。原因是类方法可能不是独立的:它可能引用其他方法或类的成员。如果没有这些存在,lamba 函数肯定毫无意义......
-
感谢您的回答,但您是对的,arkascha:我试图独立于类定义。因此,在闭包内包装静态调用是我的问题的答案,但不是我的问题的解决方案。
-
@crimaniak,你有什么问题?
标签: php reflection lambda