jeudi 22 janvier 2015

Confusion about adapter pattern and inheritance (PHP)

I'm having some confusion with the adapter pattern and am wondering if it is the right tool for what I'm trying to accomplish.


Basically, I'm trying to get a class written by another developer to conform to an interface that I've written while also retaining the other methods from that class.


So I've written the following interface for a container object:



interface MyContainerInterface
{
public function has($key);
public function get($key);
public function add($key, $value);
public function remove($key);
}


I've also written an adapter that implements that interface:



class OtherContainerAdapter implements MyContainerInterface
{
protected $container;
public function __construct(ContainerInteface $container) {
$this->container = $container;
}

public function has($key) {
$this->container->isRegistered($key);
}

...
}


And am using it in my class as follows:



class MyClass implements \ArrayAccess
{
protected $container;
public function __construct(MyContainerInterface $container) {
$this->setContainer($container);
}

public function offsetExists($key) {
$this->container->has($key);
}

...
}


Then my application uses the class as so:



$myClass = new MyClass(new OtherContainerAdapter(new OtherContainer));


The issue I'm having is that in order to use the methods from the adapter I have to write the following:



$myClass->getContainer()->getContainer()->has('some_key');


When ideally it would just be:



$myClass->getContainer()->has('some_key');

Aucun commentaire:

Enregistrer un commentaire