一. 几个概念(如下是从自定义):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(); }