2013-12-13 100 views
0

標題可能沒有意義,不確定如何將其打開。無論如何,我在與暴動遊戲API同時練習捲曲和OOP。 API是一種愚蠢的地方,你想要請求的某些信息需要你不知道的輸入,所以它需要另一個單獨的調用才能獲得所需的信息。在另一個公共功能中使用一個公共功能

class league 
{ 
    const URL = 'http://prod.api.pvp.net/api/lol/na/v1.1/'; 
    const URL_2 = 'http://prod.api.pvp.net/api/lol/na/v2.1/'; 
    const KEY = 'key'; 

    public function summonerByName($summoner_name) 
    { 
     $request = 'summoner/by-name/' . $summoner_name . '?api_key =' . self::KEY; 
     return $this->fetch($request); 
    } 

    public function recentGamesByName($summoner_name) 
    { 
     //need to make two calls for this since you cant get recent games by name in the api 

     $id = summonerByName($summoner_name); 

     //now get recent games 
     $request = 'game/by-summoner/' . $id->id . '/recent'; 
     return $this->fetch($request); 
    } 


    private function fetch($request) 
    { 
     $url = self::URL . $request . '?api_key=' . self::KEY; 
     $curl = curl_init($url); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
     $data = curl_exec($curl); 
     curl_close($curl); 
     return json_decode($data); 
    } 
} 

這是回訪Fatal error: Call to undefined function summonerbyname()

,如果我在public function recentGamesByName(),而不是$id = summonerByName()它工作正常使用下面這些額外的代碼,但它似乎沒有必要,我想,以取代只用功能。

$grg = self::URL . 'summoner/by-name/' . $summoner_name . '?api_key=' . self::KEY; 
$placeholder = curl_init($grg); 
curl_setopt($placeholder, CURLOPT_RETURNTRANSFER, 1); 
$ph_result = curl_exec($placeholder); 
curl_close($placeholder); 
$ph_result = json_decode($ph_result); 

回答

1

$id = $this->summonerByName($summoner_name);

你可能想在OOP閱讀起來。

+0

我將它切換到'$ id = $ this-> summonerByName($ summoner_name);'。現在'$ id-> id'什麼也沒有。實際上'var_dump($ id)'什麼也沒有。 – robz228

+0

不要說這只是summonerByName函數的一個問題,但這是我錯了。謝謝! – robz228

0

一些事情要記住OOP。當你在INSIDE類中並需要調用另一個函數時,可以使用特殊的$ this變量。

,因此會使用:

$someVariable = $this->summonerByName($summoner_name); 

擺脫該功能的結果。

如果你是外班和需要訪問該功能,則需要整個類分配給一個變量,像這樣:

$league = new league(); 

,然後你可以使用類內訪問任何功能那個變量。

所以,你可以做...

$someVariable = $league->summonerByName($summoner_name); 

如果您已經分配了類變量名$聯賽。順便說一下,那個$聯賽變量?它被稱爲對象。因此面向對象編程。對象有點像數組,但使用不同的語法。您可以像打印陣列一樣print_r一個對象。當訪問對象的變量時,您使用$ objectName-> variableName語法而不是您在數組中使用的$ arrayName ['variablename']語法。

+0

我想到了大部分情況。被$ this這個用法弄糊塗了。我一直只使用數組,並且在大多數情況下從未看到指向對象的點。試圖瞭解對象現在哈 – robz228