【问题标题】:Repassing unknown number of arguments重新传递未知数量的参数
【发布时间】:2013-10-01 08:03:17
【问题描述】:

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

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

以上工作。谢谢。

【问题讨论】:

标签: php arguments


【解决方案1】:
function foo() {
    $args = func_get_args();
    return call_user_func_array(array($model, $method), $args);
}

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多