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 回答