我有这个小函数,我用来调用我班上的一些函数。
public static function call($method){
$Model = new Model();
if(method_exists($Model, $method)){
return $Model->{$method}();
}
}
现在,我的问题是关于通过的args。我想要修复它们,我不希望传递一个数组,而是实际的参数。
我知道函数func_get_arg()和func_num_args(),但这不起作用:
$args = '';
for($i=0; $i<func_num_args(); $i++){
$args .= func_get_args($i).',';
}
$args = substr($args, 0, strlen($args)-1);
我可以调用任何替代方法并传入$ Model-&gt; {$ method}(passed_args)吗?
更新
我尝试将方法改为此,但它不起作用:
public static function call($method){
$Model = new Model();
$args = func_get_args();
if(method_exists($Model, $method)){
return call_user_func_array(array($Model, $method), $args);
}
}
如果我这样做,它会起作用,因为直到现在我只有一个arg或者没有:
public static function call($method, $args = null){
$Model = new Model();
if(method_exists($Model, $method)){
return $Model->{$method}($args);
}
}
解决方案:
当然我必须改变方法调用:
public static function call(){
$Model = new Model();
$args = func_get_args();
$method = array_shift($args);
if(method_exists($Model, $method)){
return call_user_func_array(array($Model, $method), $args);
}
}
以上作品。谢谢。
答案 0 :(得分:1)
function foo() {
$args = func_get_args();
return call_user_func_array(array($model, $method), $args);
}