我目前正在创建一个需要使用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();
}
答案 0 :(得分:1)
如果您尝试匹配本机OAuth签名,那么您仍然具有某种依赖关系,因为一旦本机OAuth类发生更改,您将不得不在代码中反映出来。您可以构建自己的界面,然后使用适配器来支持您自己的OAuth版本和本机版本。 Adapter Pattern