将本机类符合用户定义的接口?

时间:2013-03-04 01:20:43

标签: php inheritance interface

我目前正在创建一个需要使用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();
}

1 个答案:

答案 0 :(得分:1)

如果您尝试匹配本机OAuth签名,那么您仍然具有某种依赖关系,因为一旦本机OAuth类发生更改,您将不得不在代码中反映出来。您可以构建自己的界面,然后使用适配器来支持您自己的OAuth版本和本机版本。 Adapter Pattern