鉴于冗余,有更好的方法吗?如果是这样,它会是什么样子?
注意第一个$method
参数,它作为$api
类中的函数名传递,不能作为参数传递给API函数。此后的每一个论点都可能不存在。
function jsonRequest( $method )
{
$api = new JsonRpcClient( 'https://api.example.com' );
switch ( func_num_args() ) {
case 2:
$result = $api->$method( 'AccountRef', 'APIKey', func_get_arg( 1 ) );
break; case 3:
$result = $api->$method( 'AccountRef', 'APIKey', func_get_arg( 1 ), func_get_arg( 2 ) );
break; case 4:
$result = $api->$method( 'AccountRef', 'APIKey', func_get_arg( 1 ), func_get_arg( 2 ), func_get_arg( 3 ) );
break; case 5:
$result = $api->$method( 'AccountRef', 'APIKey', func_get_arg( 1 ), func_get_arg( 2 ), func_get_arg( 3 ), func_get_arg( 4 ) );
break;
}
return json_decode( $result );
}
答案 0 :(得分:3)
您应该使用call_user_func_array
:
$data = array_merge(array('AccountRef', 'APIKey'), func_get_args());
call_user_func_array(array($api, $method), $data);
来源:http://php.net/manual/en/function.call-user-func-array.php