2012-10-19 110 views
2

鑑於冗餘,是否有更好的方法來做到這一點?如果是這樣,它會是什麼樣子?傳遞可變參數列表

請注意第一個$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

你可以使用一個for循環? – twodayslate

+0

那將是什麼樣子?我考慮過它,但是無法將我的頭部用於將函數調用引發的語法。 –

+0

你可以爲擴展參數傳遞'func_get_arg(2)'或'NULL'嗎? –

回答

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

+0

太棒了,我完全忽略了那個函數認爲它是不相關的。 D'哦!只需要現在從該數組中刪除$方法。 –

+0

@AndrewBestic - 不要忘了標記它作爲答案,如果它的作品。您可以通過單擊問題右側的勾選標記來完成此操作(請注意,每個問題只能接受一個答案)。 –

+0

能夠刪除初始參數:'$ args = func_get_args(); unset($ args [0]);' –