国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel思維導(dǎo)圖之Laravel核心概念

wthee / 2571人閱讀

摘要:的核心概念包括服務(wù)容器服務(wù)提供者門面契約。所有服務(wù)提供者都需要繼承類。可以為服務(wù)提供者的方法設(shè)置類型提示。方法將在所有其他服務(wù)提供者均已注冊(cè)之后調(diào)用。同樣會(huì)整理成思維導(dǎo)圖的形式以方便記憶與回顧。

Laravel 的核心概念包括:服務(wù)容器、服務(wù)提供者、門面(Facades)、契約(Contracts)。

服務(wù)容器是 Laravel 的核心,是一個(gè) IoC 容器,是管理類依賴和運(yùn)行依賴注入的有力工具。

服務(wù)提供者則提供服務(wù)并綁定服務(wù)至服務(wù)容器。是所有 Laravel 應(yīng)用程序引導(dǎo)啟動(dòng)的中心所在。

Facades 為應(yīng)用程序的服務(wù)容器中可用的類提供了一個(gè)「靜態(tài)」接口。它實(shí)際上是服務(wù)容器中那些底層類的「靜態(tài)代理」。

Laravel 的 契約(Contracts )是一系列框架用來定義核心服務(wù)的接口。

不管是契約還是門面都可以創(chuàng)建出強(qiáng)大的、容易測(cè)試的 Laravel 應(yīng)用程序。

0x00 服務(wù)容器

Laravel 的核心就是一個(gè) IoC 容器,該容器提供了整個(gè)框架中需要的一系列服務(wù)。

IoC(Inversion Of Control)控制反轉(zhuǎn),是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來減低計(jì)算機(jī)代碼之間的耦合度。IoC 容器會(huì)根據(jù)類的依賴需求,自動(dòng)在注冊(cè)、綁定的一堆實(shí)例中搜尋符合的依賴需求,并自動(dòng)注入到構(gòu)造函數(shù)參數(shù)中去。通過控制反轉(zhuǎn),對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體,將其所依賴的對(duì)象的引用傳遞給它。也可以說,依賴被注入到對(duì)象中。這就是依賴注入(Dependency Injection, DI)。依賴注入實(shí)質(zhì)上是指:類的依賴通過構(gòu)造器或在某些情況下通過「setter」方法進(jìn)行「注入」。

如何實(shí)現(xiàn)與服務(wù)容器的綁定?

幾乎所有服務(wù)容器的綁定都是在服務(wù)提供者中進(jìn)行的。在服務(wù)提供者內(nèi)部,可以通過 $this->app 來訪問容器的實(shí)例。

綁定的方式包括:

簡(jiǎn)單綁定

綁定一個(gè)單例

綁定實(shí)例

綁定接口到實(shí)現(xiàn)

情境綁定

綁定包括原始數(shù)據(jù)在內(nèi)的初始數(shù)據(jù)

標(biāo)記

其中,標(biāo)記能夠針對(duì)某種類別的所有做綁定。

如何從服務(wù)容器解析出對(duì)象?

綁定后可以從服務(wù)容器中解析出對(duì)象才能夠使用。解析方法包括:

通過 make 方法,接收一個(gè)你想要解析的類或者接口

通過數(shù)組方式從容器中解析對(duì)象

自動(dòng)注入

自動(dòng)注入實(shí)例

下面的例子中,在控制器的構(gòu)造函數(shù)中對(duì)應(yīng)用程序定義的 Repository 使用類型提示。這樣 Repository 實(shí)例會(huì)被自動(dòng)解析并注入到類中:

users = $users;
    }

    /**
     * 顯示指定 ID 的用戶信息。
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
        //
    }
}
0x01 服務(wù)提供者

Laravel 中,包括應(yīng)用程序,以及所有的 Laravel 核心服務(wù),都是通過服務(wù)提供者引導(dǎo)啟動(dòng)的。所謂的「引導(dǎo)啟動(dòng)」指的是注冊(cè)事務(wù),包括注冊(cè)服務(wù)容器綁定,事件監(jiān)聽器,中間件,甚至路由。

所有服務(wù)提供者都需要繼承 IlluminateSupportServiceProvider 類。大多數(shù)服務(wù)提供者都包含 register 和 boot 方法。register 方法中,只能將事務(wù)綁定到 服務(wù)容器。不應(yīng)該在 register 方法中嘗試注冊(cè)任何事件監(jiān)聽器,路由或者任何其他功能。可以為服務(wù)提供者的 boot 方法設(shè)置類型提示。服務(wù)容器會(huì)自動(dòng)注入需要的任何依賴。boot 方法將在所有其他服務(wù)提供者均已注冊(cè)之后調(diào)用。

所有服務(wù)提供者都在 config/app.php 配置文件中注冊(cè)。可以選擇推遲服務(wù)提供者的注冊(cè),直到真正需要注冊(cè)綁定時(shí),這樣可以提供應(yīng)用程序的性能。

0x02 門面(Facades)

Facades 工作原理

在 Laravel 應(yīng)用中,一個(gè) facade 就是一個(gè)提供訪問容器中對(duì)象的類。其中核心的部件就是 Facade 類。不管是 Laravel 自帶的 Facades ,還是用戶自定義的 Facades ,都繼承自 IlluminateSupportFacadesFacade 類。

Facade 基類使用 __callStatic() 魔術(shù)方法在你的 Facades 中延遲調(diào)用容器中對(duì)應(yīng)對(duì)象的方法,在下面的例子中,調(diào)用了 Laravel 的緩存系統(tǒng)。在代碼里,我們可能認(rèn)為是 Cache 類中的靜態(tài)方法 get 被調(diào)用了:

 $user]);
    }
}

注意在代碼的最上面,我們導(dǎo)入的是 Cache facade 。這個(gè) facade 其實(shí)是我們獲取底層 IlluminateContractsCacheFactory 接口實(shí)現(xiàn)的一個(gè)代理。我們通過這個(gè) facade 調(diào)用的任何方法,都會(huì)被傳遞到 Laravel 緩存服務(wù)的底層實(shí)例中。

如果我們看一下 IlluminateSupportFacadesCache 這個(gè)類,你會(huì)發(fā)現(xiàn)類中根本沒有 get 這個(gè)靜態(tài)方法:

class Cache extends Facade
{
    /**
     * 獲取組件在容器中注冊(cè)的名稱。
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return "cache"; }
}

其實(shí),Cache facade 是繼承了 Facade 基類,并且定義了 getFacadeAccessor() 方法。這個(gè)方法的作用是返回服務(wù)容器中對(duì)應(yīng)名字的綁定內(nèi)容。當(dāng)用戶調(diào)用 Cache facade 中的任何靜態(tài)方法時(shí), Laravel 會(huì)解析到服務(wù)容器中綁定的鍵值為 cache 實(shí)例對(duì)象,并調(diào)用這個(gè)對(duì)象對(duì)應(yīng)的方法(在這個(gè)例子中就是 get 方法)。

0x03 契約(Contracts)

如何使用契約?

Laravel 中的許多類型的類都是通過 服務(wù)容器 解析出來的。包括控制器、事件監(jiān)聽器、中間件、任務(wù)隊(duì)列,甚至路由的閉包。所以說,要獲得一個(gè)契約的實(shí)現(xiàn),你只需要解析在類的構(gòu)造函數(shù)中相應(yīng)的類型約束即可。

例如,看看這個(gè)事件監(jiān)聽器,當(dāng)事件監(jiān)聽器被解析時(shí),服務(wù)容器會(huì)從構(gòu)造函數(shù)里讀取到類型約束,并注入對(duì)應(yīng)的值。

redis = $redis;
    }

    /**
     * 處理事件。
     *
     * @param  OrderWasPlaced  $event
     * @return void
     */
    public function handle(OrderWasPlaced $event)
    {
        //
    }
}
下一步

Laravel 作為“為 Web 藝術(shù)家創(chuàng)造的 PHP 框架”,接下來我將學(xué)習(xí)其中最重要的內(nèi)容之一 HTTP 層的相關(guān)知識(shí)。同樣會(huì)整理成思維導(dǎo)圖的形式以方便記憶與回顧。

這些文章都將首發(fā)在微信公眾號(hào):up2048 上。歡迎大家掃描下面的二維碼,我們一起學(xué)習(xí),分享,討論,反思。

思維導(dǎo)圖導(dǎo)出為圖片時(shí)會(huì)導(dǎo)致其變模糊。若需要高清的思維導(dǎo)圖源文件,請(qǐng)關(guān)注微信公眾號(hào):up2048,并回復(fù)“精進(jìn)腦圖”來獲取。

- EOF -

推薦閱讀

Laravel思維導(dǎo)圖之Laravel入門指南

十五張思維導(dǎo)圖帶你快速學(xué)習(xí)PHP言語(yǔ)基礎(chǔ)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/25701.html

相關(guān)文章

  • Laravel思維導(dǎo)圖之Laravel HTTP路由、中間件、控制器

    摘要:又限于層的內(nèi)容太多,我在這篇中將整理路由中間件控制器部分內(nèi)容。前者定義頁(yè)面路由,默認(rèn)應(yīng)用中間件組后者定義無狀態(tài)路由,會(huì)應(yīng)用中間件組。命名路由可以為指定路由或者控制器方法命名,也可以為已命名的路由生成。 showImg(https://segmentfault.com/img/remote/1460000010882838); 上圖列出了 Laravel HTTP 層的相關(guān)知識(shí)大綱。由于...

    linkin 評(píng)論0 收藏0
  • Laravel思維導(dǎo)圖之HTTP請(qǐng)求、響應(yīng)、表單驗(yàn)證

    摘要:今天我來分享中層關(guān)于請(qǐng)求響應(yīng)與表單驗(yàn)證的知識(shí)。手動(dòng)創(chuàng)建驗(yàn)證請(qǐng)求之前的內(nèi)容是直接使用的方法來實(shí)現(xiàn)表單驗(yàn)證。下一步到這篇為止,我完成了入門指南核心概念層的路由中間件控制器請(qǐng)求響應(yīng)表單驗(yàn)證的學(xué)習(xí)和整理。 showImg(https://segmentfault.com/img/remote/1460000010882838); 今天我來分享 Laravel 中 HTTP 層關(guān)于請(qǐng)求、響應(yīng)與表...

    lewif 評(píng)論0 收藏0
  • Laravel思維導(dǎo)圖之Laravel入門指南

    摘要:本系列思維導(dǎo)圖整理自版本官方文檔。思維導(dǎo)圖導(dǎo)出為圖片時(shí)會(huì)導(dǎo)致其變模糊。需要高清的思維導(dǎo)圖源文件,請(qǐng)關(guān)注微信公眾號(hào),并回復(fù)精進(jìn)腦圖來獲取。今天我們就通過張思維導(dǎo)圖來快速看入門指南。這些文章都將首發(fā)在微信公眾號(hào)上。 showImg(https://segmentfault.com/img/remote/1460000010774258); 本系列思維導(dǎo)圖整理自 Laravel 5.4 版...

    vibiu 評(píng)論0 收藏0
  • 記一次 Laravel 應(yīng)用性能調(diào)優(yōu)經(jīng)歷

    摘要:為了一探究竟,于是開啟了這次應(yīng)用性能調(diào)優(yōu)之旅。使用即時(shí)編譯器和都能輕輕松松的讓你的應(yīng)用程序在不用做任何修改的情況下,直接提高或者更高的性能。 這是一份事后的總結(jié)。在經(jīng)歷了調(diào)優(yōu)過程踩的很多坑之后,我們最終完善并實(shí)施了初步的性能測(cè)試方案,通過真實(shí)的測(cè)試數(shù)據(jù)歸納出了 Laravel 開發(fā)過程中的一些實(shí)踐技巧。 0x00 源起 最近有同事反饋 Laravel 寫的應(yīng)用程序響應(yīng)有點(diǎn)慢、20幾個(gè)并...

    warkiz 評(píng)論0 收藏0
  • 十五張思維導(dǎo)圖帶你快速學(xué)習(xí)PHP語(yǔ)言基礎(chǔ)

    摘要:思維導(dǎo)圖導(dǎo)出為圖片時(shí)會(huì)導(dǎo)致其變模糊。需要高清的思維導(dǎo)圖源文件,請(qǐng)關(guān)注微信公眾號(hào),并回復(fù)精進(jìn)腦圖來獲取。下面我們就通過張思維導(dǎo)圖來快速學(xué)習(xí)語(yǔ)言基礎(chǔ)。這些文章都將首發(fā)在微信公眾號(hào)上。 showImg(https://segmentfault.com/img/remote/1460000010743585); 在打算系統(tǒng)的學(xué)習(xí) Laravel 之前,我抽空看了 PHP 語(yǔ)言基礎(chǔ),并且繪制了...

    xialong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<