PHP - REST客户端中的DI容器

时间:2012-04-02 23:38:51

标签: php rest dependencies containers

我正在尝试在PHP中构建一个基本的REST客户端,以此来熟悉依赖注入容器的概念。最终,我想做一些事情:

$client = new RestClient();
$client->getService('user', array('id, optional fields...'));

但我也希望能够指定哪个对象应该处理请求(例如,如果我想使用fopen而不是curl)。

根据我到目前为止所读到的,实现这一目标的正确方法是:

$request = new ServiceDefinition( 
    'Curl', 
    array('...') 
); 
$user = new ServiceDefinition('User',  
    array(new ServiceReference('request')) 
); 
$container = new ServiceContainer(array( 
    'request' => $request, 
    'user'    => $user, 
));

我的问题是:是否有更简单的方法来构建用户对象和请求对象之间的依赖关系? (RestClient()上的基本setter注入,也许?)

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据您对依赖注入的熟悉程度,使用DI容器可能会在深层跳入。简而言之,用简单的二次注射替代容器当然是可能的:

interface HttpAdapterInterface {}
class CurlAdapter implements HttpAdapterInterface {}
class SocketAdapter implements HttpAdapterInterface {}

class RestClient {
    public function setHttpAdapter(HttpAdapterInterface $adapter) {
        // ...
    }
}

Fabien Potencier有a good series on DI,其中第二部分涵盖了DI容器(以及何时使用它们)。