1. 程式人生 > >Laravel學習-容器

Laravel學習-容器

容器基本認識

laravel框架應用程式的例項就是一個容器,改例項是在bootstrap/app.php內初始化:

$app = new Illuminate\Foundation\Application(
    realpath(__DIR__ . '/../')
);

該例項在整個生命週期裡是唯一的,後續相關的服務都是在該例項上執行的。

在專案中獲取容器例項的方法

  • 通過app函式獲取

    $app = app();

  • 通過face獲取

    App::boot();

  • 通過服務提供者的屬性獲取

    服務提供者類都是由laravel容器例項化的,這些類都繼承自Illuminate\Support\ServiceProvider,它定義了一個例項屬性$app。

容器結構

容器的結構上包含了許多陣列,用來儲存各種服務,如果想要深入瞭解,需要搞清楚這些陣列的含義。

例項如何繫結與解析服務

通過字面含義,容器是用來儲存物件,服務的存入和取出就是繫結與解析的過程。

繫結服務的幾種方式:
app()->singleton(...)
app()->bind(...)
app()['service'] =...

具體參考laravel的文件

解析服務的幾種方式:
app()->make('service')
app()['service']
app('service')

如果都具體實現感興趣可以深入去檢視這些方法的實現。

服務提供者

前面提到了如何繫結與解析服務,那麼具體的服務就得靠服務提供者來提供具體的服務了,所以服務提供者起到把具體的邏輯繫結到容器上的作用。
平時你一定發現每個laravel的擴充套件包都有一個繼承Illuminate\Support\ServiceProvider的服務提供者類。
在我們的config/app.php裡面引入自定義的服務提供者,我們就可以在程式碼中通過例項解析服務來使用擴充套件了。