1

我正在使用 Laravel 4,这里有以下代码:

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方法返回我想要的结果,但something方法没有?在这种情况下,我可能对继承的工作方式有一些错误的理解,所以请帮帮我!

4

1 回答 1

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;
}
于 2013-10-22T17:52:19.980 回答