laravel建立服务

laravel关于这块的教程不少,php

所谓控制反转,就是把该由主类所有完成的事情改由子类去完成,这种设计思路就叫控制反转laravel

实现控制反转有多种方式,工厂模式即是一种比较常见的模式,什么是工厂模式,也就是说父类不须要一个一个去new须要的子类,父类只须要new一次工厂类,由工厂决定子类的依赖,工厂返回类对象,父类直接调用类方法便可。框架

工厂模式其实已经能够知足咱们目前的不少开发方式了,可是也存在一个问题,全部的模块都在工厂类中安排好了,若是有新的类,咱们必须去改造工厂。ide

因而接口的做用就来了,接口是什么,接口是一个类,这个类只有须要实现的方法名字跟入参,并无方法的定义,继承接口的类必须实现接口的方法才能使用。这样咱们就有了更为先进的处理方式了,由接口来规范各个子类的调用,我主类只管去初始化接口就实现了个人所有工做。函数

class Superman{
    protected $module;

    public function __construct(SuperModuleInterface $module)
    {
        $this->module = $module
    }}

因而,依赖注入的概念就出来了,咱们的全部依赖,只要不是由内部生产(好比初始化、构造函数 __construct 中经过工厂方法、自行手动 new 的),而是由外部以参数或其余形式注入的,都属于 依赖注入(DI) 。是否是豁然开朗?事实上,就是这么简单。下面就是一个典型的依赖注入:this

// 超能力模组$superModule = new XPower;// 初始化一个超人,并注入一个超能力模组依赖
$superMan = new Superman($superModule);

而后下面就是IoC容器了,咱们经过最初的 绑定(bind) 操做,咱们向 超级工厂 注册了一些生产脚本,这些生产脚本在生产指令下达之时便会执行,这种就叫IoC容器spa

实际上,真正的 IoC 容器更为高级。咱们如今的例子中,仍是须要手动提供超人所须要的模组参数,但真正的 IoC 容器会根据类的依赖需求,自动在注册、绑定的一堆实例中搜寻符合的依赖需求,并自动注入到构造函数参数中去。Laravel 框架的服务容器正是这么作的。实现这种功能其实理论上并不麻烦,但我并不会在本文中写出,由于……我懒得写。不过我告诉你们,这种自动搜寻依赖需求的功能,是经过 反射(Reflection) 实现的设计

服务提供者

咱们在前文介绍 IoC 容器的部分中,提到了,一个类须要绑定、注册至容器中,才能被“制造”。code

对,一个类要被容器所可以提取,必需要先注册至这个容器。既然 laravel 称这个容器叫作服务容器,那么咱们须要某个服务,就得先注册、绑定这个服务到容器,那么提供服务并绑定服务至容器的东西,就是 服务提供者(ServiceProvider)对象

虽然,绑定一个类到容器不必定非要经过 服务提供者(ServiceProvider)

可是,咱们知道,有时候咱们的类、模块会有须要其余类和组件的状况,为了保证初始化阶段不会出现所须要的模块和组件没有注册的状况,laravel 将注册和初始化行为进行拆分,注册的时候就只能注册,初始化的时候就是初始化。拆分后的产物就是如今的 服务提供者

服务提供者主要分为两个部分,register(注册)boot(引导、初始化),具体参考文档。register 负责进行向容器注册“脚本”,但要注意注册部分不要有对未知事物的依赖,若是有,就要移步至 boot 部分。

https://phphub.org/topics/789

相关文章
相关标签/搜索