成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel 依賴注入思想

goji / 3405人閱讀

摘要:依賴注入依賴注入是個(gè)花俏的名詞,事實(shí)上是指類的依賴通過(guò)構(gòu)造器或在某些情況下通過(guò)方法注入。通過(guò)服務(wù)容器來(lái)管理類依賴并進(jìn)行依賴注入。其中最常見(jiàn)的方式叫做依賴注入,簡(jiǎn)稱,還有一種方式叫依賴查找。也可以說(shuō),依賴被注入到對(duì)象中。

依賴注入

依賴注入是個(gè)花俏的名詞,事實(shí)上是指:類的依賴通過(guò)構(gòu)造器或在某些情況下通過(guò)「setter」方法「注入」。先看一段 Laravel 控制器里的代碼實(shí)例:

users = $users;
    }

    /**
     * 顯示指定 ID 的用戶。
     *
     * @param  int  $id
     * @return View
     */
    public function show($id)
    {
        $user_info = $this->users->find($id);
        return view("user", ["user_info" => $user_info]);
    }
}

Laravel 通過(guò)服務(wù)容器來(lái)管理類依賴并進(jìn)行依賴注入。如果使用一個(gè)接口作為函數(shù)參數(shù)的類型提示,這個(gè)時(shí)候就需要將指定的實(shí)現(xiàn)綁定到接口上面:

interface EventPusher {
    public function send($data);
}
class RedisEventPusher implements EventPusher {
    public function send($data) {
        //
    }
}
$this->app->bind("AppContractsEventPusher", "AppServicesRedisEventPusher");
use AppContractsEventPusher;

/**
 * 創(chuàng)建一個(gè)新的類實(shí)例。
 *
 * @param  EventPusher  $pusher
 * @return void
 */
public function __construct(EventPusher $pusher)
{
    $this->pusher = $pusher;
}

這個(gè)就是所謂的面向接口編程,接口可以理解為一個(gè)規(guī)范、一個(gè)約束。高層模塊不直接依賴于低層模塊,它們都應(yīng)該依賴于抽象(指接口)。

使用依賴注入,最重要的一點(diǎn)好處就是有效的分離了對(duì)象和它所需要的外部資源,使得它們松散耦合,有利于功能復(fù)用,更重要的是使得程序的整個(gè)體系結(jié)構(gòu)變得非常靈活。

控制反轉(zhuǎn)

控制反轉(zhuǎn)(Inversion of Control,縮寫(xiě)為IoC),是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則。其中**最常見(jiàn)的方式叫做依賴注入(Dependency Injection,簡(jiǎn)稱DI),還有一種方式叫“依賴查找”(Dependency Lookup)。通過(guò)控制反轉(zhuǎn),對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體,將其所依賴的對(duì)象的引用傳遞給它。也可以說(shuō),依賴被注入到對(duì)象中。

c = new C(); // 實(shí)例化創(chuàng)建C類
    }

    public function sayC()
    {
        echo $this->c->say(); // 調(diào)用C類中的方法
    }
}

$a = new a();
$a->sayC();

當(dāng)有了IoC/DI的容器后,A類不再主動(dòng)去創(chuàng)建C了,如下圖所示:

而是被動(dòng)等待,等待IoC/DI的容器獲取一個(gè)C的實(shí)例,然后反向的注入到A類中,如下圖所示:

c = $c; // 實(shí)例化創(chuàng)建C類
    }

    public function sayC()
    {
        echo $this->c->say(); // 調(diào)用C類中的方法
    }
}

$c = new C();
$a = new a();
$a->setC($c);
$a->sayC();
參考鏈接

類型約束

PHP 依賴注入,從此不再考慮加載順序

Java基礎(chǔ):面向?qū)ο笕筇卣?、五大原則

依賴倒置原則

PHP程序員如何理解依賴注入容器(dependency injection container)

聊一聊PHP的依賴注入(DI) 和 控制反轉(zhuǎn)(IoC)

深入探討依賴注入

服務(wù)容器

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22049.html

相關(guān)文章

  • Laravel中的核心概念

    摘要:可以為服務(wù)提供者的方法設(shè)置類型提示。方法將在所有其他服務(wù)提供者均已注冊(cè)之后調(diào)用。所有服務(wù)提供者都在配置文件中注冊(cè)??梢赃x擇推遲服務(wù)提供者的注冊(cè),直到真正需要注冊(cè)綁定時(shí),這樣可以提供應(yīng)用程序的性能。 本文最早發(fā)布于 Rootrl的Blog 導(dǎo)言 Laravel是一款先進(jìn)的現(xiàn)代化框架,里面有一些概念非常重要。在上手Laravel之前,我認(rèn)為先弄懂這些概念是很有必要的。你甚至需要重溫下PHP...

    ddongjian0000 評(píng)論0 收藏0
  • 認(rèn)識(shí)Laravel中服務(wù)提供者和服務(wù)容器

    摘要:上面應(yīng)用依賴容器后這段代碼來(lái)自從容器中取得中服務(wù)提供者看看官方的例子注冊(cè)一個(gè)服務(wù)在容器中注冊(cè)綁定。使用綁定單例有沒(méi)有發(fā)現(xiàn)方法其實(shí)就是往依賴容器里設(shè)置一個(gè)類。然后官方文檔也說(shuō)了,就是一個(gè)服務(wù)容器,聽(tīng)名字也知道了其實(shí)就是依賴容器。 其實(shí)laravel中的服務(wù)容器就是一個(gè)依賴容器,依賴容器是什么,請(qǐng)看下文。 依賴注入 當(dāng)一個(gè)系統(tǒng)變復(fù)雜后,經(jīng)常會(huì)遇到A類需要B類的方法,B類需要C類的方法這樣的...

    hatlonely 評(píng)論0 收藏0
  • Laravel 服務(wù)容器實(shí)現(xiàn)原理

    摘要:框架中就是使用服務(wù)容器來(lái)實(shí)現(xiàn)控制反轉(zhuǎn)和依賴注入。容器依賴注入的實(shí)現(xiàn)實(shí)現(xiàn)原理需要了解的知識(shí)點(diǎn)閉包匿名函數(shù)匿名函數(shù),也叫閉包函數(shù),允許臨時(shí)創(chuàng)建一個(gè)沒(méi)有指定名稱的函數(shù)反射以上版本具有完整的反射,添加了對(duì)類接口函數(shù)方法和擴(kuò)展進(jìn)行反向工程的能力。 前言 通過(guò)實(shí)現(xiàn)laravel 框架功能,以便深入理解laravel框架的先進(jìn)思想。 什么是服務(wù)容器 服務(wù)容器是用來(lái)管理類依賴與運(yùn)行依賴注入的工具。La...

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

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

    worldligang 評(píng)論0 收藏0
  • 深入理解IoC(控制反轉(zhuǎn))、DI(依賴注入

    摘要:引述最近看設(shè)計(jì)模式以及代碼,對(duì)于控制反轉(zhuǎn)以及依賴注入這些概念非常困惑,于是找了一些資料,以下是對(duì)于控制反轉(zhuǎn)的一下理解。其中最常見(jiàn)的方式叫做依賴注入,簡(jiǎn)稱,還有一種方式叫依賴查找。在軟件工程中,依賴注入是種實(shí)現(xiàn)控制反轉(zhuǎn)用于解決依賴性設(shè)計(jì)模式。 引述 最近看設(shè)計(jì)模式以及l(fā)aravel代碼,對(duì)于控制反轉(zhuǎn)以及依賴注入這些概念非常困惑,于是找了一些資料,以下是對(duì)于控制反轉(zhuǎn)的一下理解。 概念 Io...

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

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

0條評(píng)論

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