1

現在、 OAuthの使用が必要なライブラリを作成しています。PHP には、OAuth私が個人的にインストールして利用できる拡張機能がありますが、他の人が使用できない可能性があるため、ライブラリにこの依存関係を要求したくありません。

インターフェイスを作成しましたが、ネイティブクラスをOAuthInterface拡張して実装することで、このインターフェイスを実装できるようにしたいと考えています。OAuth

namespace My\Lib\OAuth;

class OAuth extends \OAuth implements OAuthInterface {}

ただし、ネイティブ クラスのメソッド シグネチャと正確に一致するインターフェイスを作成するのに苦労しており、次のOAuthようなエラーが発生し続けます。

PHP Fatal error:  Declaration of OAuth::fetch() must be compatible with My\\Lib\\OAuth\\OAuthInterface::fetch($url, array $params = Array, $method = 'GET', array $headers = Array) in /path/to/My/Lib/OAuth/OAuth.php on line 7

私がやろうとしていることは不可能ですか?OAuth実装を、ネイティブを拡張するのではなく、ネイティブのインスタンスを構成するパススルー クラスにする必要がありますか? それとも、正しいメソッド シグネチャをまだ見つけていないのでしょうか。

これが役立つ場合のインターフェースは次のとおりです。

namespace My\Lib\OAuth;

interface OAuthInterface
{
    public function fetch($url, array $params = [], $method = 'GET', array $headers = []);
    public function getLastResponse();
}
4

1 に答える 1

1

ネイティブ OAuth 署名と一致させようとすると、ネイティブ OAuth クラスが変更されると、それをコードに反映する必要があるため、ここではまだ一種の依存関係があります。独自のインターフェイスを構築し、アダプタを使用して独自のバージョンの OAuth とネイティブ バージョンをサポートできます。アダプターパターン

于 2013-03-04T01:34:03.580 に答える