2010-04-03 116 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); 
    } 
}