加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

zend-framework2 – 在ZF2中的任何位置获取服务定位器

发布时间:2020-12-13 17:57:30 所属栏目:PHP教程 来源:网络整理
导读:根据这篇文章: http://www.maltblue.com/tutorial/zend-framework-2-servicemanager ServiceManager“简而言之就是一个提供对象的简单应用程序注册表”.所以,我认为它应该是一个单例,我们可以在应用程序的任何地方访问.但是在ServiceManager的情况下,它不是
根据这篇文章: http://www.maltblue.com/tutorial/zend-framework-2-servicemanager

ServiceManager“简而言之就是一个提供对象的简单应用程序注册表”.所以,我认为它应该是一个单例,我们可以在应用程序的任何地方访问.但是在ServiceManager的情况下,它不是.

为什么我不能在应用程序的任何位置获取服务定位器实例?

ServiceManager基本上充当容器.在容器内部,您满足您创建的对象的各种依赖关系,然后将其返回以供其他对象使用.

因此SM以某种方式坐在对象上,而不是进入对象内部.如果您在对象内使用SM实例(可能访问其他服务),那么您将违反控制反转原则.

以下是两种方式

class A {    
    private $data;
    public function __constructor($sm) {
        $this->data = $sm->get('user_data'); // Service manager accessed inside the object
    }
}

另一种方式

class B {
    private $data; 
    public function __constructor($user_data) {
            $this->data = $user_data;     //$user_data getting injected from sm container 
    }
}

在Module.php里面的某个地方:

'factories'=>        
    array(
        'objB'=> function($sm) {
            //this is the container where sm sites outside the object to satisfy its dependencies
            $objB = new B($sm->get('user_data'));  
            return $objB;
        }
    )

在第二个示例中,依赖项($user_data)被注入到对象中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读