您好,登錄后才能下訂單哦!
這篇文章主要介紹laravel中的Contracts, ServiceContainer, ServiceProvider, Facades關系是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Contracts
, ServiceContainer
, ServiceProvider
, Facades
1.Contracts
合同,契約,也就是接口,定義一些規則,每個實現此接口的都要實現里面的方法;
2.ServiceContainer
,實現Contracts
,具體的邏輯實現;
3.ServiceProvider
, serviceContainer
的服務提供者,返回ServiceContainer
的實例化,供其他地方使用,可以把它加入到app/config
的provider
中,會被自動注冊到容器中;
4.Facades
, 簡化ServiceProvider
的調用方式,而且可以靜態調用ServiceContainer
中的方法;
實現
Contracts
接口可以寫或不寫,這里就不定義了;
定義一個ServiceContainer
,實現具體的功能
namespace App\Helper; class MyFoo { public function add($a, $b) { return $a+$b; } }
定義一個ServiceProvider
供其他地方使用ServiceContain
<?php namespace App\Providers; use App\Helper\MyFoo; //要服務的Container use Illuminate\Support\ServiceProvider; use App; class MyFooServiceProvider extends ServiceProvider { public function boot(){} //注冊到容器中 public function register() { //可以這么綁定,這需要use App; App::bind("myfoo",function(){ return new MyFoo(); }); //也可以這么綁定 $this->app->bind("myfoo", function(){ return new MyFoo(); }); } }
在app/config.php
中的providers
數組中加入ServiceProvider
,讓系統自動注冊
App\Providers\MyFooServiceProvider::class
,
這時候就可以使用了,假設在控制器中使用
public function two($id=null) { //從系統容器中獲取實例化對象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); }
這樣太麻煩,還需要用make
來獲取對象,為了簡便,就可以使用門面功能,定義門面MyFooFacade
namespace App\Facades; use Illuminate\Support\Facades\Facade; class MyFooFacade extends Facade { protected static function getFacadeAccessor() { //這里返回的是ServiceProvider中注冊時,定義的字符串 return 'myfoo'; } }
在控制器里就可以直接調用了
use App\Facades\MyFooFacade; public function two($id=null) { //從系統容器中獲取實例化對象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); //使用門面 echo MyFooFacade::add(4,5); }
以上是“laravel中的Contracts, ServiceContainer, ServiceProvider, Facades關系是什么”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。