Php 如何仅在需要时实例化依赖项
我的课程如下:Php 如何仅在需要时实例化依赖项,php,dependency-injection,Php,Dependency Injection,我的课程如下: class Foo { protected $dependency; function __constructor(Dependency $dependency) { $this->dependency = $dependency; } function get($name = null) { if(is_null($name)) return $this->
class Foo {
protected $dependency;
function __constructor(Dependency $dependency)
{
$this->dependency = $dependency;
}
function get($name = null)
{
if(is_null($name))
return $this->dependency->get();
return $name;
}
}
new Foo(new Dependency);
问题是,即使不需要依赖项,我也会实例化它
如何仅在需要时实例化依赖项?在实例化
Foo
时,您并不知道Foo
是否需要依赖项,因此在注入依赖项时。如果您想要一个惰性依赖,您可以将这种复杂性转移到以下两个地方之一:
Foo
。为此,Foo
需要某种工厂/服务定位器/依赖项注入容器,允许Foo
在需要时获取dependency
的实例。例如:
public function get($name = null) {
if (is_null($name)) {
return $this->dependencyFactory->getInstance()->get();
}
}
缺点:Foo
需要意识到这种复杂性依赖关系在内部变为惰性。无论Dependency
使用资源做什么,都要延迟,直到第一次调用Dependency::get
优点:其他组件不需要知道这种行为,可以像以前一样继续使用该类
在实例化
Foo
时,您并不知道Foo
是否需要依赖项,因此在注入依赖项时。如果您想要一个惰性依赖,您可以将这种复杂性转移到以下两个地方之一:
Foo
。为此,Foo
需要某种工厂/服务定位器/依赖项注入容器,允许Foo
在需要时获取dependency
的实例。例如:
public function get($name = null) {
if (is_null($name)) {
return $this->dependencyFactory->getInstance()->get();
}
}
缺点:Foo
需要意识到这种复杂性依赖关系在内部变为惰性。无论Dependency
使用资源做什么,都要延迟,直到第一次调用Dependency::get
优点:其他组件不需要知道这种行为,可以像以前一样继续使用该类
您应该使用setter注入,以便在需要时设置注入类,而不是使用构造函数注入。您应该使用setter注入,以便在需要时设置注入类。因此,如果
$name
为null
get()
方法的内部?是。我只想在$name为null时注入依赖项,并且仍然应用控制反转在PHP中,并将其放入get
方法中。或者使用setter注入。我将处于相同的情况,但使用setter或get函数时处于不同的函数中。因此,如果$name
在get()中为null
,则只希望注入依赖项
method?是的。我只想在$name为null时注入依赖项,并且仍然应用控制反转。然后将其从构造函数中取出(spelt\uu construct()
在PHP中,并将其放在get
方法中。或者使用setter注入。我将处于相同的情况,但使用setter或get函数时处于不同的函数中。您能给我一些代码以便我更好地理解吗?请注意,这意味着Foo
之外的一些外部代码需要知道Foo
何时需要de依赖性。这扩展了以前包含在Foo::get
中的逻辑。你能给我一些代码让我更好地理解吗?注意,这意味着Foo
之外的一些外部代码需要知道Foo
何时需要依赖性。这扩展了以前包含在Foo
中的逻辑Foo::get
。是的!使用容器的延迟加载是我问题的解决方案。谢谢!是的!使用容器的延迟加载是我问题的解决方案。谢谢!