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)被注入到对象中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |