原文連接: https://learnku.com/laravel/t...
討論請前往專業的 Laravel 開發者論壇: https://learnku.com/Laravel
在理解服務容器以前,咱們須要知道什麼是容器,從名稱上能夠解釋這一切,由於容器是咱們存儲東西的地方,當咱們須要時咱們從那裏獲取它。下面是代碼示例。laravel
class container{ public $bindings =[]; public function bind($name, Callable $resource){ $this->bindings[$name]=resource; } public function make($name){ $this->bindings[$name](); } } $container = new container(); $container->bind('Game',function(){ return 'Football'; }); print_r($container->make('Game')); //輸出 'Football'
正如您所看到的,我建立了一個容器類,其中有兩個方法app
1) Bind
2) Make框架
在 bind 方法中將咱們的函數註冊到一個容器中,而後在 make 方法中調用這個函數。
這是 Laravel 中服務容器的基本概念函數
正如已經閱讀了 Laravel 文檔同樣,Service Container 幫助咱們管理依賴關係。讓咱們看一個例子工具
app()->bind('Game',function(){ return new Game(); }); dd(app()->make('Game')); // 輸出 Game{} // class
在上面的代碼中 app()->bind() 將咱們的服務綁定起來。。而後咱們就能夠調用 make() 方法來使用它,接着咱們能夠將它做爲一個類輸出。。可是若是類 Game 依賴於類 Football,以下面的代碼所示。它將會有錯誤拋出this
Class Game{ public function __construct(Football $football){ $this->football =$football; } } app()->bind('Game',function(){ return new Game(); }); dd(app()->make('Game')); // 輸出
將拋出類 football not found 的錯誤信息,所以咱們要建立一個 football 類,以下代碼所示。spa
class Football{ } Class Game{ public function __construct(Football $football){ $this->football =$football; } } app()->bind('Game',function(){ return new Game(new Football); });
可是,若是類 Football 須要依賴一個體育場的類等等,Laravel 均可以經過服務容器處理依賴。3d
class Football{ } class Game{ public function __construct(Football $football){ $this->football =$football; } } /*app()->bind('Game',function(){ return new Game(new Football); });*/ dd(resolve('Game')); // 輸出 Game{ football {} }
所以,咱們能夠說 Service Container 是管理類依賴項和執行依賴項注入的強大工具。。。:)code
原文連接: https://learnku.com/laravel/t...
討論請前往專業的 Laravel 開發者論壇: https://learnku.com/Larav