2010-04-03 71 views
1

我正在構建一個類以將API調用發送到Rapidshare並返回所述調用的結果。這是我要如何做呼叫:使用參數陣列設置API調用時遇到困難

$rs = new rs(); 

$params = array(
    'sub' => 'listfiles_v1', 
    'type' => 'prem', 
    'login' => '10347455', 
    'password' => 'not_real_pass', 
    'realfolder' => '0', 
    'fields' => 'filename,downloads,size', 
    ); 

print_r($rs->apiCall($params)); 

而這裏的類迄今:

class RS 
{ 
    var $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub='; 

    function apiCall($params) 
    { 
     $newUrl = $baseUrl; 
     $keys = array_keys($params); 
     $count = count($params); 
     for($i = 0; $i < $count; $i++) 
     { 
      $newUrl .= $keys[$i]; 
      $newUrl .= '&'; 
      $newUrl .= $params[$keys[$i]]; 
     } 
     return $newUrl; 
    } 
} 

很顯然,我返回$newUrl並使用print_r()測試查詢字符串,這是什麼它出來,與上述所示的代碼:

sub&listfiles_v1type&premlogin&10347455password&_not_real_passrealfolder&0fields&filename,downloads,size 

當它應該是:

http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=listfiles_v1&type=prem&login=10347455&password=not_real_pass&realfolder=0&fields=filename,downloads,size 

希望你能看到我想在這裏做的事:P這可能是一個愚蠢的錯誤,我沒有找到或邏輯錯誤。

在此先感謝。

回答

1

你應該有:

$newUrl = $this->baseUrl; 

您需要使用$this從該類內指的是類的成員。也不要使用var來聲明成員。這是PHP4和(afaik)棄用。而是使用private(等

最後,你的循環建立的參數可以大大簡化和邏輯是不是你想達到什麼正確的嘗試:

class RS { 
    private $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?'; 

    function apiCall($params) { 
    $newUrl = $this->baseUrl; 
    foreach ($params as $k => $v) { 
     $newUrl .= urlencode($k) . '=' . urlencode($v) . '&'; 
    } 
    return $newUrl; 
    } 
} 

,或者甚至更好,使用http_build_query()

class RS { 
    private $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?'; 

    function apiCall($params) { 
    return $this->baseUrl . http_build_query($params); 
    } 
}