2013-10-22 117 views
1

我使用Laravel 4,我有這樣的代碼在這裏:Laravel繼承失敗

http://demo.php-pastebin.com/2sfuOUE7

上面的第一行有一條線在那裏我有另一個類文件(CHPPConnection,這是一個庫更容易實現的OAuth 1.0,位於http://pht.htloto.org)的

這是retrieveAccessToken方法在該庫中的代碼:

/** 
* Get access token for chpp application 
* 
* @param String $oauthToken 
* @param String $verifier 
*/ 
public function retrieveAccessToken($oauthToken, $verifier) 
{ 
    $params = array(
     'oauth_consumer_key' => $this->consumerKey, 
     'oauth_signature_method' => $this->signatureMethod, 
     'oauth_timestamp' => $this->getTimestamp(), 
     'oauth_nonce' => $this->getNonce(), 
     'oauth_token' => $oauthToken, 
     'oauth_verifier' => $verifier, 
     'oauth_version' => $this->version 
    ); 
    $signature = $this->buildSignature(self::OAUTH_SERVER.self::ACCESS_URL, $params, $this->oauthFirstTokenSecret); 
    $params['oauth_signature'] = $signature; 
    uksort($params, 'strcmp'); 
    $url = $this->buildOauthUrl(self::OAUTH_SERVER.self::ACCESS_URL, $params); 
    if($this->canLog()) 
    { 
     $this->log("[OAUTH] Access url: ".$url); 
    } 
    $return = $this->fetchUrl($url, false); 
    $result = explode('&', $return); 
    foreach($result as $val) 
    { 
     $t = explode('=', $val); 
     $$t[0] = urldecode($t[1]); 
    } 
    if(isset($oauth_token)) 
    { 
     $this->setOauthToken($oauth_token); 
     if($this->canLog()) 
     { 
      $this->log("[OAUTH] Access token: ".$oauth_token); 
     } 
    } 
    if(isset($oauth_token_secret)) 
    { 
     $this->setOauthTokenSecret($oauth_token_secret); 
     if($this->canLog()) 
     { 
      $this->log("[OAUTH] Access token secret: ".$oauth_token_secret); 
     } 
    } 
} 

爲什麼我的代碼不工作?爲什麼__constructor方法返回我想要的結果,但東西方法不?在這種情況下,我可能有些錯誤的理解繼承是如何工作的,所以請幫助我!

回答

0

我認爲這可能是因爲你試圖返回你的構造函數中的東西,所以也許當你實例化它時,你不是檢索它的一個實例,而是一個pht的實例,顯然不會有something()函數你正在尋找。

class PhtController extends BaseController { 

    protected $_pht; 

    public function __construct() 
    { 
      $this->_pht = new CHPPConnection(
          Config::get("pht.consumerKey"), 
          Config::get("pht.consumerSecret"), 
          Config::get("pht.callback")); 
      //this returns true 
    } 

    public function something() 
    { 
      $at = $this->_pht->retrieveAccessToken($_REQUEST["oauth_token"], $_REQUEST["oauth_verifier"]); 

      //vardump $at here dumps just NULL and cannot use any other methods aswell, returns false 
    } 
} 

// If you need to retrieve the instance of pht for any reason, call this function rather than returning it in the constructor. 
public function getPHT() 
{ 
    return $this->_pht; 
} 
+0

感謝您的努力。不幸的是,這並沒有幫助。 –