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

資訊專欄INFORMATION COLUMN

認(rèn)識(shí)Laravel中服務(wù)提供者和服務(wù)容器

hatlonely / 1857人閱讀

摘要:上面應(yīng)用依賴容器后這段代碼來自從容器中取得中服務(wù)提供者看看官方的例子注冊(cè)一個(gè)服務(wù)在容器中注冊(cè)綁定。使用綁定單例有沒有發(fā)現(xiàn)方法其實(shí)就是往依賴容器里設(shè)置一個(gè)類。然后官方文檔也說了,就是一個(gè)服務(wù)容器,聽名字也知道了其實(shí)就是依賴容器。

其實(shí)laravel中的服務(wù)容器就是一個(gè)依賴容器,依賴容器是什么,請(qǐng)看下文。

依賴注入

當(dāng)一個(gè)系統(tǒng)變復(fù)雜后,經(jīng)常會(huì)遇到A類需要B類的方法,B類需要C類的方法這樣的情況。傳統(tǒng)的思路下,我們會(huì)這么寫:

class Bim
{
    public function doSomething()
    {
        echo __METHOD__, "|";
    }
}

class Bar
{
    public function doSomething()
    {
        $bim = new Bim();
        $bim->doSomething();
        echo __METHOD__, "|";
    }
}

class Foo
{
    public function doSomething()
    {
        $bar = new Bar();
        $bar->doSomething();
        echo __METHOD__;
    }
}

$foo = new Foo();
$foo->doSomething(); 

應(yīng)用依賴注入的思想(依賴注入聽上去很花哨,其實(shí)質(zhì)是通過構(gòu)造函數(shù)或者某些情況下通過 set 方法將類依賴注入到類中):
改成這樣:

class Bim
{
    public function doSomething()
    {
        echo __METHOD__, "|";
    }
}

class Bar
{
    private $bim;

    public function __construct(Bim $bim)
    {
        $this->bim = $bim;
    }

    public function doSomething()
    {
        $this->bim->doSomething();
        echo __METHOD__, "|";
    }
}

class Foo
{
    private $bar;

    public function __construct(Bar $bar)
    {
        $this->bar = $bar;
    }

    public function doSomething()
    {
        $this->bar->doSomething();
        echo __METHOD__;
    }
}

$foo = new Foo(new Bar(new Bim()));
$foo->doSomething(); // Bim::doSomething|Bar::doSomething|Foo::doSomething
依賴容器

上面類的實(shí)例化還是我們手動(dòng)new的,依賴容器的作用就是把類的實(shí)例化管理起來,應(yīng)用程序需要到Foo類,就從容器內(nèi)取得Foo類,容器創(chuàng)建Bim類,再創(chuàng)建Bar類并把Bim注入,再創(chuàng)建Foo類,并把Bar注入,應(yīng)用程序調(diào)用Foo方法,F(xiàn)oo調(diào)用Bar方法,接著做些其它工作。
上面應(yīng)用依賴容器后(這段代碼來自Twittee):

class Container
{
    private $s = array();
    
    function __set($k, $c)
    {
        $this->s[$k] = $c;
    }
    
    function __get($k)
    {
        return $this->s[$k]($this);
    }
}


$c = new Container();
$c->bim = function () {
    return new Bim();
};
$c->bar = function ($c) {
    return new Bar($c->bim);
};
$c->foo = function ($c) {
    return new Foo($c->bar);
};

// 從容器中取得Foo
$foo = $c->foo;
$foo->doSomething(); // Bim::doSomething|Bar::doSomething|Foo::doSomething
laravel中服務(wù)提供者

看看官方的例子:
注冊(cè)一個(gè)服務(wù):

use RiakConnection;
use IlluminateSupportServiceProvider;

class TestServiceProvider extends ServiceProvider {

    /**
     * 在容器中注冊(cè)綁定。
     *
     * @return void
     */
    public function register()
    {
        //使用singleton綁定單例
        $this->app->singleton("test",function(){
            return new TestService();
        });
    }

}

有沒有發(fā)現(xiàn)register方法其實(shí)就是往依賴容器里設(shè)置一個(gè)類。然后官方文檔也說了,
$this->app就是一個(gè)服務(wù)容器,聽名字也知道了其實(shí)就是依賴容器

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

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

相關(guān)文章

  • Laravel修煉:服務(wù)容器綁定與解析

    摘要:用匿名函數(shù)的好處在于,這個(gè)服務(wù)綁定到容器以后,并不會(huì)立即產(chǎn)生服務(wù)最終的對(duì)象,只有在這個(gè)服務(wù)解析的時(shí)候,匿名函數(shù)才會(huì)執(zhí)行,此時(shí)才會(huì)產(chǎn)生這個(gè)服務(wù)對(duì)應(yīng)的服務(wù)實(shí)例。 前言 ? 老實(shí)說,第一次老大讓我看laravel框架手冊(cè)的那天早上,我是很絕望的,因?yàn)檎娴臎]接觸過,對(duì)我這種渣渣來說,laravel的入門門檻確實(shí)有點(diǎn)高了,但還是得硬著頭皮看下去(雖然到現(xiàn)在我還有很多沒看懂,也沒用過)。? 后面慢...

    The question 評(píng)論0 收藏0
  • Laravel 動(dòng)態(tài)添加 Artisan 命令的最佳實(shí)踐

    摘要:初步嘗試既然最常見的注冊(cè)命令的方式是修改類中的,那么一般正常人都會(huì)從這邊開始下手。又要自己取出實(shí)例,又要自己調(diào)用方法,調(diào)用方法之前還有自己先把實(shí)例化這么繁瑣,肯定不是運(yùn)行時(shí)添加命令的最佳實(shí)踐,所以我決定繼續(xù)尋找更優(yōu)解。 本文首發(fā)于我的博客,原文鏈接:https://blessing.studio/best-... 雖然 Laravel 官方文檔提供的添加 Artisan Command...

    ninefive 評(píng)論0 收藏0
  • Laravel深入學(xué)習(xí)2 - 控制反轉(zhuǎn)容器

    摘要:控制反轉(zhuǎn)容器控制反轉(zhuǎn)使依賴注入變得更加便捷。有瑕疵控制反轉(zhuǎn)容器是實(shí)現(xiàn)的控制翻轉(zhuǎn)容器的一種替代方案。容器的獨(dú)立使用即使沒有使用框架,我們?nèi)匀豢梢栽陧?xiàng)目中使用安裝組件來使用的控制反轉(zhuǎn)容器。在沒有給定任何信息的情況下,容器是無法實(shí)例化相關(guān)依賴的。 聲明:本文并非博主原創(chuàng),而是來自對(duì)《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當(dāng)然也不是原汁原味...

    worldligang 評(píng)論0 收藏0
  • 深入剖析 Laravel 服務(wù)容器

    摘要:劃下重點(diǎn),服務(wù)容器是用于管理類的依賴和執(zhí)行依賴注入的工具。類的實(shí)例化及其依賴的注入,完全由服務(wù)容器自動(dòng)的去完成。 本文首發(fā)于 深入剖析 Laravel 服務(wù)容器,轉(zhuǎn)載請(qǐng)注明出處。喜歡的朋友不要吝嗇你們的贊同,謝謝。 之前在 深度挖掘 Laravel 生命周期 一文中,我們有去探究 Laravel 究竟是如何接收 HTTP 請(qǐng)求,又是如何生成響應(yīng)并最終呈現(xiàn)給用戶的工作原理。 本章將帶領(lǐng)大...

    abson 評(píng)論0 收藏0
  • 我的 2015 年度小結(jié)(技術(shù)方面)

    摘要:因?yàn)槁酚蓪用媸軜I(yè)務(wù)影響很大,經(jīng)常修改一些功能的行為,所以后來大部分測(cè)試都是針對(duì)層面的單元測(cè)試。在我了解的過程中,我發(fā)現(xiàn)中文網(wǎng)絡(luò)上對(duì)的討論非常分散,于是我創(chuàng)建了中文社區(qū),到年末已經(jīng)有個(gè)注冊(cè)用戶和個(gè)帖子了。 https://jysperm.me/2016/02/programming-of-2015/ 從 2014 年末開始開發(fā)的一個(gè)互聯(lián)網(wǎng)金融項(xiàng)目終于在今年三月份上線了,這是一個(gè) Node...

    宋華 評(píng)論0 收藏0

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

0條評(píng)論

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