2010-04-03 2 views
1

Rapidshare로 API 호출을 보내고 해당 호출의 결과를 반환하는 클래스를 작성했습니다.매개 변수 배열을 사용하여 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; 
    } 
} 

내가 쿼리 문자열을 테스트 print_r()를 사용하여 $newUrl을 반환하고있어이,이 무슨이다

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

그것을해야한다 :

,536는 위의 코드로 나온다
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) deprecated입니다. 대신 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); 
    } 
} 
관련 문제