Laravel學習-容器
阿新 • • 發佈:2019-02-17
容器基本認識
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裡面引入自定義的服務提供者,我們就可以在程式碼中通過例項解析服務來使用擴充套件了。