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 に答える