重绕未知数量的参数

时间:2013-10-01 08:03:18

标签: php arguments

我有这个小函数,我用来调用我班上的一些函数。

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);
    }
}

以上作品。谢谢。

1 个答案:

答案 0 :(得分:1)

function foo() {
    $args = func_get_args();
    return call_user_func_array(array($model, $method), $args);
}