PHP框架开发,依赖注入_控制反转_容器知识点

这可能是我写过最多字,最长时间的博客。
主要是为了深入了解框架运行过程,框架的开发,框架的基本知识点。
主要点:
1. 依赖注入
3. 容器
4. 服务提供者

  • 依赖注入
    > Laravel的作者说:依赖注入是一个花俏的名词,它实质上是指:类的依赖通过构造器或在某些情况下通过「setter」方法进行「注入」。

这是一个基本操作数据的封装,我们发现DB的构造函数出现了new而且传递了参数,这样子如果有很多种数据库操作就会导致代码需要修改,重写。

我们还是发现了问题所在, 需要操作什么数据库都要在DB的构造函数new一个实例,所以这还不是我们想要的结果。这就引入了依赖注入

我们想操作什么数据库,就在外部new一个数据库操作对象,然后注入进DB的构造函数,这样我们在DB中就可以得到这个数据库操作对象的实例。
到现在,一个基本的依赖注入已经实现,但还不够严禁。

这里我们新建了一个接口,所有的数据库操作类都必须要query方法,而且在DB的构造函数限制了注入的对象必须是符合DataBaseInterface接口的。这样如果注入的是其他参数就会报错。

  • 容器

根据psr11的标准,容器的实现必须有gethas方法。
容器的实现思路很简单。

一个基础的容器拥有这些功能,容器应该还需要有判断是否相互依赖,注册服务提供者…
具体代码可以到我的github仓库看
Ico容器
DavidNineRoc/gps
这里不写反射的原因是因为,我将要用新的一篇介绍通过反射解决参数的问题。

  • laravel 的服务提供者

laravel提供基本的服务,
laravel的别名是通过class_alias来注册,然后可以达到不使用命名空间直接用类名, 比如
Route::get