分解 Laravel 框架的核心:服務容器(Service Container)

分解 Laravel 框架的核心:服務容器(Service Container)

原文連接: 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
相關文章
相關標籤/搜索