Решение
Благодаря 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 __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;
}
}
}
Благодарю.
использование call_user_func_array
public function __call($method, $params){
return call_user_func_array($this->_rpc->$method(),$params)
}
Других решений пока нет …