2013-03-04 5 views
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(); 
} 

ответ

1

Если вы пытаетесь соответствовать родной подписи OAuth вы до сих пор своего рода зависимость здесь потому, что когда-то меняет родной класс OAuth вам придется отразить, что в вашем коде. Вы можете создать свой собственный интерфейс, а затем использовать адаптер для поддержки собственной версии OAuth и собственной. Adapter Pattern

+0

Да, шаблон адаптера - это то, что я имел в виду под «сквозным классом». Спасибо за ссылку. – FtDRbwLXw6

Смежные вопросы