laravel被稱為最優雅的框架,最近正在學習中,對於用慣了thinkphp、ci框架的人來說,服務容器。服務提供者,依賴注入這些概念簡直是一臉懵逼。我花了些時間梳理了一下,也不敢確定自己說的是對的,如果有錯誤的地方還請多多包涵。我盡量把問題說的簡單易懂,希望能對通在學laravel的人有起到幫助作用
一、服務容器, 服務容器顧名思義是指裝載服務事務的容器,我的理解就是一個類,這個類稱它為容器,這個類下面的方法稱它為服務
example:
我創建一個服務容器我在app下建一個文件夾Test、創建文件\Test\TestService.php作為服務容器
<?php
namespace App\Test;
class TestService{
//這里我寫一個服務方法,以被別的地方來調用
public function callme($say){
echo $say;
}
}
二、服務提供者服務提供者,就是提供服務的人。注意前面提到的服務容器是用來裝載服務的,而服務提供者是用來提供服務的。我舉個例子吧,把服務比喻成菜餚,而服務容器就是盛裝菜餚的器皿,而服務提供者就是上菜的服務員。顧客(調用服務的地方)想要上什么菜(服務),需要通過服務員(服務提供者)傳遞。
example:
我創建一個服務提供者,在providers目錄下創建服務提供者TestServiceProvider.php,注意:服務提供者需要在config/app.php里面的providers數組里面注冊
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Test\TestService;
class TestServiceProvider extends ServiceProvider
{
public function boot()
{
//
}
public function register()
{
//單例實例化服務容器Test/TestService.php
$this->app->singleton('test',function(){
return new TestService();
});
}
}
三、在一個控制器里面調用服務實例
<?php
namespace App\Http\Controllers;
use App\Test\TestService;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
//在構造函數中依賴注入
function __construct(TestService $test){
$this->test=$test;
//此時的的 $this->test相當於實例化了服務容器:TestService
}
public function get_index()
{
//調用服務容器TestService下的callme方法
$this->test->callme('hello');
}
}