首頁  >  文章  >  php框架  >  laravel中的Contracts, ServiceContainer, ServiceProvider, Facades關係詳解

laravel中的Contracts, ServiceContainer, ServiceProvider, Facades關係詳解

藏色散人
藏色散人轉載
2020-04-16 11:42:283071瀏覽

Contracts, ServiceContainer, ServiceProvider, Facades 

1.Contracts 合約,契約,也就是接口,定義一些規則,每個實作此介面的都要實作裡面的方法;

2.ServiceContainer,實作Contracts,具體的邏輯實作;

3.ServiceProviderserviceContainer的服務提供者,傳回ServiceContainer的實例化,供其他地方使用,可以把它加入 app/configprovider中,會被自動註冊到容器中;

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 &#39;myfoo&#39;;
    }
}

 

在控制器裡就可以直接呼叫了

use App\Facades\MyFooFacade;
public function two($id=null)
{
    //从系统容器中获取实例化对象
    $myfoo = App::make("myfoo");
    echo $myfoo->add(1,2);
    //使用门面
    echo MyFooFacade::add(4,5);
}

 

 

總的來說,自訂了一個類,為了方便在其他別處使用,便可以使用服務提供者和門面。

推薦:《

laravel教學

以上是laravel中的Contracts, ServiceContainer, ServiceProvider, Facades關係詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除