【发布时间】:2011-07-07 12:25:52
【问题描述】:
当尝试使用任意一组参数调用子类中的函数时,我遇到了以下问题:
class Base{
function callDerived($method,$params){
call_user_func_array(array($this,$method),$params);
}
}
class Derived extends Base{
function test($foo,$bar){
print "foo=$foo, bar=$bar\n";
}
}
$d = new Derived();
$d->callDerived('test',array('bar'=>'2','foo'=>1));
输出:
foo=2, bar=1
这...不是我想要的——有没有办法实现这个超越用func_get_args的索引顺序重新组合数组?是的,当然,我可以简单地传递整个数组并在函数中处理它......但这不是我想要做的。
谢谢
【问题讨论】:
-
我觉得你在这里运气不好......
-
没办法。此外,您不知道自己方法的参数顺序也让人感到不舒服:X 如果您想确保特定顺序,也许您应该考虑使用
interfaces。跨度> -
@KingCrunch 实际上,我不确定的是我得到的参数数组的顺序 - 但是是的,这是一个笨拙的情况。
-
@Wagemage:也许你只是不需要
call_user_func_array():call_user_func('func', $array['foo'], $array['bar']);? -
@KingCrunch 是的,我明白你的意思了——但是对于不同的派生类,调用将有不同数量和参数的顺序......这是我试图消除悲观情绪的一个问题,不是我正在尝试编写的全新代码。