ホームページ  >  記事  >  PHPフレームワーク  >  laravelにおけるContracts、ServiceContainer、ServiceProvider、Facadeの関係を詳しく解説

laravelにおけるContracts、ServiceContainer、ServiceProvider、Facadeの関係を詳しく解説

藏色散人
藏色散人転載
2020-04-16 11:42:283009ブラウズ

契約サービスコンテナサービスプロバイダファサード

1.契約 契約、コントラクト、つまりインターフェイスはいくつかのルールを定義しており、このインターフェイスを実装する人は全員、内部のメソッドを実装する必要があります;

2.ServiceContainerContracts を実装します。 、特に論理実装。

serviceContainer

のサービス プロバイダーである 3.ServiceProvider は、他の場所で使用するために ServiceContainer のインスタンス化を返します。これを app/configprovider に追加すると、自動的にコンテナーに登録されます;

4.Facades、simplifyServiceProvider メソッドを呼び出し、ServiceContainer;

implementation

# のメソッドを静的に呼び出すことができます。 ##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();
        });
    }
}

at

##ServiceProvider を #app/config.phpproviders 配列に追加して、システムが

App\Providers\MyFooServiceProvider を自動的に登録できるようにします。 :class

,

現時点では使えるのでコントローラーで使うとする

public function two($id=null)
{
    //从系统容器中获取实例化对象
    $myfoo = App::make("myfoo");
    echo $myfoo->add(1,2);
}

面倒すぎる

make

オブジェクトを取得するには、簡単にするために、ファサード関数を使用して、ファサードを定義します。 MyFooFacade<pre class="brush:php;toolbar:false">namespace App\Facades; use Illuminate\Support\Facades\Facade; class MyFooFacade extends Facade { protected static function getFacadeAccessor() { //这里返回的是ServiceProvider中注册时,定义的字符串 return &amp;#39;myfoo&amp;#39;; } }</pre>

そして、それをコントローラーで直接呼び出すことができます

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、Facadeの関係を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。