如果你想了解PHP依赖注入和控制反转这两个概念,你必须了解以下问题:
DI——依赖注入
IoC——控制反转
1。参与者有哪些?
答案: 一般涉及三方,一是对象,二是对象。一是IoC/DI的容器;另一个是对象的外部资源。让我再解释一下名词。对象是指任何普通的Java对象; IoC/DI容器简单来说就是用来实现IoC/DI功能的框架程序;对象的外部资源引用该对象。需要的,但是从对象外部获得的,统称为资源,比如:该对象需要的其他对象,或者该对象需要的文件资源等。
2。依赖:谁依赖谁?为什么会有依赖关系?
答案:一个对象依赖于IoC/DI容器。依赖性是不可避免的。在一个项目中,各个类之间存在着各种各样的关系,不可能都完全独立,这就形成了依赖关系。传统开发是在使用其他类时直接调用,这样会形成强耦合,应该避免。依赖注入借用容器来传递依赖对象,实现解耦。
3。注射:谁给谁注射?具体注射的是什么?
答案:通过容器将其需要的外部资源注入到对象中
4。控制反转:谁控制谁?控制什么?为什么叫逆转呢?
答案:IoC/DI的容器控制对象主要控制对象实例的创建。反转是相对于正向而言的,那么什么才算是正向呢?想想正常情况下的应用。如果你想在A中使用C,你会怎么做?当然,直接创建C的对象,即在A类中主动获取所需的外部资源C,这种情况称为前向。那么什么是反向呢?即A类不再主动获取C,而是被动等待IoC/DI容器获取C的实例,然后反向注入到A类中。
5。依赖注入和控制反转是同一个概念吗?
答案:从上面可以看出:依赖注入是从应用程序的角度来描述的。依赖注入可以更全面地描述:应用程序依赖容器来创建和注入它需要的外部资源;而控制响应的描述是从容器的角度来看的。完整的描述是:容器控制应用程序,容器将应用程序所需的外部资源反向注入到应用程序中。
我们通过例子来详细了解一下依赖注入的一些实现方法:
1.构造函数注入
db_conn = $db_conn; } }
2。坐垫注射
db=$db; } 函数设置文件($文件){ $这个->文件=$文件; } } 类文件{} 类数据库{} ... 课堂测试{ $book = new Book(); $book->setdb(new db()); $book->setfile(新文件()); } ?>
上面两种方法的代码都很清晰,但是当我们需要注入很多依赖的时候,就意味着增加很多行,管理起来会比较困难。
更好的解决方案是创建一个类作为所有依赖项的容器。在这个类中,您可以存储、创建、获取和查找所需的依赖项
set_db(self::$db_conn); //... //... //其他依赖注入 返回$new_book; } }
此时如果想要获取一个book实例,只需要执行$newone = Ioc::makebook();
以上是容器的具体例子。最好不要编写特定的依赖注入方法。最好使用注册表注册并获取
登录后复制
您现在可以通过以下方式注册注射一支
setdb('...'); $book->setprice('...'); 返回 $book; }); //注入依赖 $book = Ioc::resolve('book'); ?>
以上就是对PHP依赖注入和控制反转的理解。希望对大家学习PHP编程有所帮助。