首頁  >  文章  >  php框架  >  laravel容器是什麼

laravel容器是什麼

藏色散人
藏色散人原創
2019-08-06 11:06:124210瀏覽

laravel容器是什麼

laravel容器是什麼? Laravel 服務容器是什麼?

在 Laravel 文件 中,有一段關於 Laravel 服務容器的介紹:

Laravel 服務容器是用於管理類別的依賴和執行依賴注入的工具。依賴注入這個花俏名詞實質上是指:類別的依賴項透過建構函數,或是某些情況下透過「setter」方法「注入」到類別中。

劃下重點,「Laravel 服務容器」是用於 管理類別的依賴 和 執行依賴注入 的 工具。

透過前一節「依賴注入基本概念」相關闡述,我們不難得出這樣一個簡單的結論「Laravel 服務容器」就是「依賴注入容器」。

其實,服務容器作為「依賴注入容器」去完成Laravel 所需依賴的註冊、綁定和解析工作只是「Laravel 服務容器」核心功能之一;另外,「Laravel 服務容器」還擔綱Laravel 應用的註冊程式的功能。

節選一段「深度挖掘Laravel 生命週期」一文中有關服務容器的內容:

建立應用程式實例即實例化Illuminate\Foundation\Application 這個服務容器,後續我們稱之為APP容器。在建立 APP 容器主要會完成:註冊應用的基礎路徑並將路徑綁定到 APP 容器 、註冊基礎服務提供者至 APP 容器 、註冊核心容器別名至 APP 容器 等基礎服務的註冊工作。

所以要了解Larvel 服務容器必然需要研究Illuminate\Foundation\Application 的建構子:

/**
     * Create a new Illuminate application instance.
     *
     * @see https://github.com/laravel/framework/blob/5.6/src/Illuminate/Foundation/Application.php#L162:27
     * @param  string|null  $basePath
     * @return void
     */
    public function __construct($basePath = null)
    {
        if ($basePath) {
            $this->setBasePath($basePath);
        }
        $this->registerBaseBindings();
        $this->registerBaseServiceProviders();
        $this->registerCoreContainerAliases();
    }

沒錯在Application 類別的建構子一共完成3 個操作的處理功能:

透過registerBaseBindings() 方法將「App 實例(即Laravel 服務容器)」自身註冊到「Laravel 服務容器」;

透過registerBaseServiceProviders() 註冊應用Laravel 框架的基礎服務提供者;

透過registerCoreContainerAliases() 將具體的「依賴注入容器」及其別名註冊到「Laravel 服務容器」。

這裡所說的「註冊」歸根到底還是在執行「Laravel 服務容器」的「綁定(bind)」操作,完成綁定介面到實作。

為了表名我所言非虛,讓我們看看registerBaseBindings() 方法:

  /**
     * Register the basic bindings into the container. 注册 App 实例本身到 App 容器
     *
     * @return void
     */
    protected function registerBaseBindings()
    {
        static::setInstance($this);
        $this->instance('app', $this);
        $this->instance(Container::class, $this);
        $this->instance(PackageManifest::class, new PackageManifest(
            new Filesystem, $this->basePath(), $this->getCachedPackagesPath()
        ));
    }

我們知道instance() 方法會將物件實例$this 綁定到容器的app 和Container::class 介面。後續無論是透過 app()->make('app') 或 app()->make(Container::class) 取得的實作類別都是 $this(即 Laravel 服務容器實例) 物件。有關 instance 的使用方法可以查閱 Laravel 服務容器解析文檔,不過我也會在下文中給予相關使用說明。

到這裡相信大家對「Laravel 服務容器」有了比較清晰的理解了。

更多Laravel相關技術文章,請造訪Laravel框架入門教學專欄進行學習!

以上是laravel容器是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn