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

資訊專欄INFORMATION COLUMN

又一個(gè)強(qiáng)大的PHP5.3依賴注入容器

sf190404 / 2572人閱讀

摘要:現(xiàn)在我們就可以在構(gòu)造函數(shù)或者任何其他通過服務(wù)容器注入依賴項(xiàng)的地方使用類型提示注入接口創(chuàng)建一個(gè)新的類實(shí)例,此處將注入的實(shí)例。自動(dòng)解析構(gòu)造函數(shù)所需的依賴的服務(wù)容器實(shí)現(xiàn)了接口。

簡單的服務(wù)容器

一個(gè)簡單的 php 5.3 依賴注入容器。

項(xiàng)目地址:https://github.com/godruoyi/easy-container

Why

目前比較流行的 PHP 容器:

Pimple

Laravel Container

其他依賴注入容器

Pimple 是一個(gè)簡單優(yōu)秀的 php 5.3 容器,也是目前用得最多的服務(wù)容器,在 packagist 的安裝量也達(dá)到 1000 w+。但是 Pimple 只是一個(gè)簡單的服務(wù)容器,不支持很多特性如:

class Cache
{
    public function __construct(Config $config){}
}

class Config
{
}

// 不支持
$cache = $container->make("Cache");

Pimple 不支持自動(dòng)注入依賴參數(shù),當(dāng)你需要的對象依賴其他對象時(shí),你只能依次實(shí)例化所需參數(shù)。

Laravel Container 是目前功能最全的服務(wù)容器了,支持的功能也比較全面,包括自動(dòng)注入、賴加載、別名、TAG等。但是官方不推薦在非 laravel 項(xiàng)目中使用該組件。

如果你有留意該組件下的 composer.json 文件,你會(huì)發(fā)現(xiàn)他依賴 illuminate/contracts 組件。(參見)

基于此,誕生了 easy-container,該項(xiàng)目代碼大部分依賴于 Laravel Container 。你可以像使用 Laravel Container 容器般來使用它。

安裝
composer require godruoyi/easy-container
使用

你可以前往 Laravel-china 獲取更多關(guān)于 容器使用 的幫助。

初始化容器

$app = new GodruoyiContainerContainer;

以下文檔支持來自 laravel-china,轉(zhuǎn)載請注明出處。

簡單綁定

可以通過 bind 方法注冊綁定,傳遞我們想要注冊的類或接口名稱再返回類的實(shí)例的 Closure

$app->bind("HelpSpotAPI", function ($app) {
    return new HelpSpotAPI($app->make("HttpClient"));
});

注意,所有匿名函數(shù)都接受服務(wù)容器實(shí)例作為參數(shù)。

綁定一個(gè)單例

singleton 方法將類或接口綁定到只能解析一次的容器中。綁定的單例被解析后,相同的對象實(shí)例會(huì)在隨后的調(diào)用中返回到容器中:

$app->singleton("HelpSpotAPI", function ($app) {
    return new HelpSpotAPI($app->make("HttpClient"));
});

每次調(diào)用 $app["HelpSpotAPI"] 都將返回統(tǒng)一對象。

綁定實(shí)例

你也可以使用 instance 方法將現(xiàn)有對象實(shí)例綁定到容器中。給定的實(shí)例會(huì)始終在隨后的調(diào)用中返回到容器中:

$api = new HelpSpotAPI(new HttpClient);

$app->instance("HelpSpotAPI", $api);
綁定接口到實(shí)現(xiàn)

服務(wù)容器有一個(gè)強(qiáng)大的功能,就是將接口綁定到給定實(shí)現(xiàn)。例如,如果我們有一個(gè) EventPusher 接口和一個(gè) RedisEventPusher 實(shí)現(xiàn)。編寫完接口的 RedisEventPusher 實(shí)現(xiàn)后,我們就可以在服務(wù)容器中注冊它,像這樣:

$app->bind(
    "AppContractsEventPusher",
    "AppServicesRedisEventPusher"
);

這么做相當(dāng)于告訴容器:當(dāng)一個(gè)類需要實(shí)現(xiàn) EventPusher 時(shí),應(yīng)該注入 RedisEventPusher?,F(xiàn)在我們就可以在構(gòu)造函數(shù)或者任何其他通過服務(wù)容器注入依賴項(xiàng)的地方使用類型提示注入 EventPusher 接口:

use AppContractsEventPusher;

/**
 * 創(chuàng)建一個(gè)新的類實(shí)例,此處將注入 AppServicesRedisEventPusher 的實(shí)例。
 *
 * @param  EventPusher  $pusher
 * @return void
 */
public function __construct(EventPusher $pusher)
{
    $this->pusher = $pusher;
}
解析 make 方法

你可以使用 make 方法將容器中的類實(shí)例解析出來 (無論該對象需要什么類型的參數(shù))。make 方法接受要解析的類或接口的名稱:

$api = $app->make("HelpSpotAPI");

mark 方法是我認(rèn)為最重要的方法,你可以簡單地使用「類型提示」的方式在由容器解析的類的構(gòu)造函數(shù)中添加依賴項(xiàng),容器將自動(dòng)解析你所需要的一切參數(shù)。

// 自動(dòng)解析UserController構(gòu)造函數(shù)所需的依賴
$userController = $app->make(UserController::class);

class UserController
{
    public function __construct(UserRepository $users, HttpClient $client, $other = "default")
    {
    }
}
PSR-11

Laravel 的服務(wù)容器實(shí)現(xiàn)了 PSR-11 接口。因此,你可以對 PSR-11容器接口類型提示來獲取 Laravel 容器的實(shí)例:

use PsrContainerContainerInterface;

$service = $app->get("Service");
LISTEN

MIT

Thanks

laravel-china

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

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

相關(guān)文章

  • 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),而是來自對《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當(dāng)然也不是原汁原味...

    worldligang 評論0 收藏0
  • 【譯文】PHP-DI和依賴注入最佳實(shí)踐

    摘要:在構(gòu)造函數(shù)中注入依賴性在中作為服務(wù)的控制器這是痛苦的,當(dāng)你有個(gè)以上的依賴項(xiàng),你的構(gòu)造函數(shù)是行樣板代碼在屬性中注入依賴性這是我們建議的解決方案。 PHP-DI是用PHP編寫的、強(qiáng)大的和實(shí)用的、框架無關(guān)的依賴注入容器。這是一個(gè)關(guān)于如何使用PHP-DI和依賴注入的最佳實(shí)踐指南。 文章來源于PHP-DI,作者:Matthieu Napoli和貢獻(xiàn)者。PHP-DI是用PHP編寫的、強(qiáng)大的和實(shí)用的...

    ivydom 評論0 收藏0
  • 【Laravel】Laravel 框架關(guān)鍵技術(shù)解析·讀書筆記(一)

    摘要:判斷是否存在構(gòu)造函數(shù),不存在直接實(shí)例化,存在則通過來獲取輸入函數(shù),并有相應(yīng)的方法解決依賴參數(shù)問題,實(shí)現(xiàn)依賴注入。 Laravel 框架關(guān)鍵技術(shù)解析·讀書筆記(一) 第一章 入口文件 請求訪問的入口文件,主要完成幾部分工作,分別是: 自動(dòng)加載函數(shù)的添加 服務(wù)器實(shí)例化與服務(wù)注冊 路由加載 請求實(shí)例化與路由分發(fā) 相應(yīng)生成與發(fā)送 其中,自動(dòng)加載函數(shù)用于包含引用文件,改文件是composer...

    CocoaChina 評論0 收藏0
  • 詳解 Laravel 中依賴注入和 IoC

    摘要:依賴注入依賴注入一詞是由提出的術(shù)語,它是將組件注入到應(yīng)用程序中的一種行為。就像說的依賴注入是敏捷架構(gòu)中關(guān)鍵元素。類依賴于,所以我們的代碼可能是這樣的創(chuàng)建一個(gè)這是一種經(jīng)典的方法,讓我們從使用構(gòu)造函數(shù)注入開始。 showImg(https://segmentfault.com/img/remote/1460000018806800); 文章轉(zhuǎn)自:https://learnku.com/la...

    haitiancoder 評論0 收藏0
  • Spring入門看這一篇就夠了

    摘要:甲乙交易活動(dòng)不需要雙方見面,避免了雙方的互不信任造成交易失敗的問題。這就是的核心思想。統(tǒng)一配置,便于修改。帶參數(shù)的構(gòu)造函數(shù)創(chuàng)建對象首先,就要提供帶參數(shù)的構(gòu)造函數(shù)接下來,關(guān)鍵是怎么配置文件了。 前言 前面已經(jīng)學(xué)習(xí)了Struts2和Hibernate框架了。接下來學(xué)習(xí)的是Spring框架...本博文主要是引入Spring框架... Spring介紹 Spring誕生: 創(chuàng)建Spring的...

    superw 評論0 收藏0

發(fā)表評論

0條評論

sf190404

|高級講師

TA的文章

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