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

相關文章
相關標籤/搜索