我想将一个静态函数赋值给一个变量,以便我可以将它作为参数传递。例如:
class Foo{
private static function privateStaticFunction($arg1,$arg2){
//compute stuff on the args
}
public static function publicStaticFunction($foo,$bar){
//works
$var = function(){
//do stuff
};
//also works
$var = function($someArg,$someArg2){
//do stuff
};
//Fatal error: Undefined class constant 'privateStaticFunction'
$var = self::privateStaticMethod;
//same error
$var = Foo::privateStaticFunction;
//compiles, but errors when I try to run $var() somewhere else, as expected
//Fatal error: Call to private method Foo::privateStaticMethod() from context ''
$var = function(){
return Foo::privateStaticMethod();
};
}
}
我尝试了几种变化,但都没有起作用。
我甚至不指望这种功能性黑客攻击在PHP中能够起作用,但是谁知道呢?
在PHP中是否可能做到这一点,还是我需要想出一些使用eval
的黑客方法?
P.S.:##php上的LawnGnome提到使用array('Foo','privateStaticMethod')
可以实现我的需求,但我不明白他的意思,而且他看起来很忙,我也没有进一步追问。
call_user_func
时,我似乎无法访问私有方法。那是另一回事了。但是,类中的闭包应该能够看到该类的私有方法,对吧? - Felipe