0

我有一个小函数,我用它来调用我班级中的一些函数。

public static function call($method){
    $Model = new Model();
    if(method_exists($Model, $method)){
        return $Model->{$method}();
    }
}

现在,我的问题是关于传递的参数。我想重新传递它们,我不想传递一个数组,而是传递实际的参数。

我知道函数 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->{$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);
    }
}

以上工作。谢谢你。

4

1 回答 1

1
function foo() {
    $args = func_get_args();
    return call_user_func_array(array($model, $method), $args);
}
于 2013-10-01T08:07:04.250 回答