请原谅这个问题的可能天真,但是我让自己真的很困惑.似乎最好使用依赖注入来解耦代码,以便您的类加载其依赖项.请想想以下类,其中Class Foo具有Bar类的依赖性
namespace Classes;
class Foo{
protected barInstance;
public function __construct(Bar $barInstance){
$this->barInstance=$barInstance;
}
}
但是,如果您正在自动加载您的课程,那么在不需要DI的情况下,以下内容完全相同吗?
namespace Classes;
use Classes/Bar;
class Foo{
protected barInstance;
public function __construct(){
$this->barInstance=new Bar;
}
}
感谢任何响应者.
解决方法:
自动加载确保您的类在引用时定义.依赖注入使您可以灵活地使用您使用的对象的实例.
在您的示例中,假设您的Bar类管理数据库连接.并且假设您有时想要连接到不同的数据库.
public function __construct(){
$this->barInstance = new Bar();
}
现在你必须重构你的Foo类来处理这个变化,因为你已经将它与一个Bar实例紧密耦合了.
public function __construct(Bar $barInstance){
$this->barInstance = $barInstance;
}
现在,在不改变Foo的情况下,我可以针对不同的情况实例化不同的Bar实例.一个常用的例子是单元测试.
在这两种情况下,自动加载确保Bar及其所有依赖项都在Foo之外定义.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。