将数组作为单独的参数传递给php函数

时间:2014-10-14 06:01:07

标签: php parameters arguments call

解决方案

感谢noufalcep,我使用

开始工作
public function __call($method, $params){
    return call_user_func_array(array($this->_rpc, $method), $params);
}

原始问题

我已经创建了一个包含另一个类jsonrpc的类,以便在我的项目中使用。

jsonrpc使用public function __call($method, $params)来处理任何类型的泛型方法。

我也在我的班级中使用相同的,但这意味着我必须将$params数组转换为单独的变量,作为参数传递给jsonrpc' s __call()

如何将$params的数组更改为多个参数?

在我的包装器类中,我尝试使用...来提供参数,但在使用[]实例化数组时似乎只能工作。

一个简单的解决方案是编辑jsonrpc类如何处理它的参数,但我更倾向于保持其源不受影响。

我尝试了什么(显然每个__call都是单独尝试的,而不是同时尝试...)

class Wrap{
    //Could have been great, but doesn't work.
    public function __call($method, $params){
        $params = array_values($params);
        return $this->_rpc->$method(...$params);
    }

    //Horrible, but works
    public function __call($method, $params){
        switch (count($params)) {
            case 0:
                return $this->_rpc->$method();
                break;
            case 1:
                return $this->_rpc->$method($params[0]);
                break;
            case 2:
                return $this->_rpc->$method($params[0], $params[1]);
                break;
            case 3:
                return $this->_rpc->$method($params[0], $params[1], $params[2]);
                break;
            case 4:
                return $this->_rpc->$method($params[0], $params[1], $params[2], $params[3]);
                break;
            default:
                die("Horrible way doesn't have enough cases!");
                break;
        }
    }
}

感谢。

1 个答案:

答案 0 :(得分:1)

使用Call_user_func_array

public function __call($method, $params){
    return call_user_func_array($this->_rpc->$method(),$params)
}