gpt4 book ai didi

zend-framework2 - 在 ZF2 的任何地方获取服务定位器

转载 作者:行者123 更新时间:2023-12-04 12:09:28 25 4
gpt4 key购买 nike

根据这篇文章: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) 被注入(inject)到对象中。

关于zend-framework2 - 在 ZF2 的任何地方获取服务定位器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16875194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com