久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Laravel學習教程之IOC容器的介紹與用例

最近在學習laravel,正好學習到了ioc容器,但發現網上這方面的資料較少,所以將自己學習的總結下,下面這篇文章主要給大家介紹了關于Laravel學習教程之IOC容器的相關資料,需要的朋友

前言

Laravel使用IoC(Inversion of Control,控制倒轉,這是一個設計模式,可以先查看下百科)容器這個強有力的工具管理類依賴。依賴注入(也是一種設計模式,一般用于實現IoC)是一個不用編寫固定代碼來處理類之間依賴的方法,相反的,這些依賴是在運行時注入的,這樣允許處理依賴時具有更大的靈活性。

理解 Laravel IoC容器是構建強大應用程序所必要的,也有助于Laravel 核心本身。下面話不多說了,來一起看看詳細的介紹吧。

基本用例

綁定一個類型到容器

IoC 容器有兩種方法來解決依賴關系:通過閉包回調或者自動解析。首先,我們來探究一下閉包回調。首先,需要綁定一個“類型”到容器中:

App::bind('foo', function($app)
{
 return new FooBar;
});

從容器中取得一個類型

$value = App::make('foo');

當執行 App::make 方法,閉包函數被執行并返回結果。

綁定一個”共享“類型到容器

有時,你只想將綁定到容器的類型處理一次,然后接下來從容器中取得的都應該是相同實例:

App::singleton('foo', function()
{
 return new FooBar;
});

綁定一個已經存在的類型實例到容器

你也可以使用instance方法,將一個已經存在的對象接口綁定到容器中:

$foo = new Foo;

App::instance('foo', $foo);

哪里去注冊綁定呢

IoC綁定,很像事件句柄或者路由過濾,通常在"bootstrap code(引導代碼)"之后完成。換句話說,它們在你的應用程序準備處理請求,也即是在一個路由或者控制器被實際執行之前執行。和其他引導代碼一樣,start文件通常作為IoC綁定注冊一種方法。另外,你可以創建一個app/ioc.php(文件名不一定一樣)文件,并在start文件中包含它。

如果你的應用程序有很大量IoC綁定,或者你想根據不同的分類將IoC綁定分割到不同的文件,你可以嘗試在服務提供器(見下面)中進行綁定

自動解析

取得一個類

IoC容器足夠強大,在許多場景下不需要任何配置就能取得類。例如

class FooBar {

 public function __construct(Baz $baz)
 {
  $this->baz = $baz;
 }

}

$fooBar = App::make('FooBar');

注意:我們雖然沒有在容器中注冊FooBar類,容器仍然可以取得該類,甚至自動注入Baz依賴!

當某個類型沒有綁定到容器,IoC容器將使用 PHP 的反射工具來檢查類和讀取構造器的類型提示。使用這些信息,容器可以自動構建類實例。

綁定一個接口實現

然而,在某些情況下,一個類可能依賴某個接口實現,而不是一個 “具體的類”。當在這種情況下,App::bind方法必須通知容器注入哪個接口實現:

App::bind('UserRepositoryInterface', 'DbUserRepository');

現在考慮下這個控制器:

class UserController extends BaseController {

 public function __construct(UserRepositoryInterface $users)
 {
  $this->users = $users;
 }

}

由于我們將 UserRepositoryInterface 綁定了具體類,DbUserRepository 在該控制器創建時將會被自動注入到該控制器。

實際用例

Laravel 提供了幾個方法使用 IoC 容器增強應用程序可擴展性和可測試性。一個主要的例子是取得控制器。所有控制器都通過 IoC 容器取得,意味著可以在控制器構造方法中對依賴的類型提示,它們將自動被注入。

對控制器的依賴關系做類型提示

class OrderController extends BaseController {

 public function __construct(OrderRepository $orders)
 {
  $this->orders = $orders;
 }

 public function getIndex()
 {
  $all = $this->orders->all();

  return View::make('orders', compact('all'));
 }

}

在這個例子中,OrderRepository 將會自動注入到控制器。意味著當 單元測試 模擬請求時,OrderRepository 將會綁定到容器以及注入到控制器中,允許無痛與數據庫層交互。

IoC 使用的其他例子

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于Laravel中unique和exists驗證規則的優化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面
最近在使用laravel5.5,利用其實現了一個功能,下面分享給大家,這篇文章主要給大家介紹了關于Laravel 5.5基于內置的Auth模塊如何實現前后臺登陸的相關資料,文中通過示例代碼介紹的非
laravel 的隊列服務對各種不同的后臺隊列服務提供了統一的 API,下面這篇文章通過源碼分析給大家介紹了關于 Laravel 重復執行同一個隊列任務的原因,文中通過示例代碼介紹的非常詳細
這篇文章主要給大家介紹了關于 Laravel Redis 多個進程同時取隊列問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友下面來
主站蜘蛛池模板: 免费在线观看成人 | 日韩av免费在线电影 | 毛片在线免费 | 一二三四在线视频观看社区 | 国产精品久久久久久久久久久久久 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 亚洲欧美网站 | 久久精品国产一区二区电影 | 亚洲一区国产精品 | 午夜欧美 | 草草网| 中文字幕成人av | 国产成都精品91一区二区三 | 亚洲国产一区二区在线 | 超碰免费在线观看 | 做a的各种视频 | 日韩视频免费 | 男人的天堂在线视频 | 午夜影院视频在线观看 | 久久久91| 亚洲区一区二 | 亚洲一区二区三区四区五区午夜 | 国产美女在线精品免费 | 日韩视频免费看 | 激情自拍偷拍 | 亚洲精品一区中文字幕乱码 | 日韩成人中文字幕 | 亚洲国产成人精品久久 | 日本久久综合 | 欧美性极品xxxx做受 | 国产精品福利久久久 | 久久久久国产精品一区二区 | 国产精品久久国产精品 | 亚洲高清电影 | 99av成人精品国语自产拍 | 一区二区免费 | 91精品国产高清久久久久久久久 | 国产农村妇女毛片精品久久麻豆 | 中文字幕一区二区三区精彩视频 | 亚洲免费在线观看 | 色久五月 |