我正在构建一个类来向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这可能是一个愚蠢的错误,我找不到或出现逻辑错误。
提前致谢。
答案 0 :(得分: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);
}
}