一. 幾個概念(如下是從自定義):php
服務提供者 :爲相關服務容器提供統一綁定場所.app
服務容器 :簡單的說實現了某些功能的對象.ide
契約 :簡單的說就是抽象類或接口,供服務容器去具體實裏面的方法.測試
門面:服務容器對象的"靜態"接口(別名).this
幾者的關係:spa
若是一個類(服務容器)沒有基於任何接口(契約) 那麼就沒有必要將其綁定到容器。
事例以下code
//自定義服務容器 <?php namespace App\Services; class UploadService { public function img() { echo '這裏是定義上傳圖片的方法'; } } //使用 <?php namespace App\Http\Controllers\Test; use App\Services\UploadService; class AdminController extends BaseController{ public function index(UploadService $img){ echo $img->img(); } }
自定義門面對象
//定義服務容器 <?php namespace App\Services; class JsonMsgService{ public function Msg(){ echo '這裏是測試'; } } //綁定 <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Services\JsonMsgService; class JsonMsgServiceProvider extends ServiceProvider{ public function register() { $this->app->singleton('JsonMsg',function(){ return new JsonMsgService; }); } } //定義門面 <?php namespace App\Facades; use Illuminate\Support\Facades\Facade; class JsonMsgFacade extends Facade{ protected static function getFacadeAccessor(){ return 'JsonMsg'; } } //配置文件config/app.php中註冊門面 'providers' => [ App\Providers\JsonMsgServiceProvider::class, 'aliases' => [ 'JsonMsg' => App\Facades\JsonMsgFacade::class, //使用 use JsonMsg; use App\Services\UploadService; class AdminController extends BaseController{ public function index(UploadService $img){ //echo $img->img(); echo JsonMsg::Msg(); }