ホームページ  >  記事  >  PHPフレームワーク  >  Laravelコンテナとは何ですか

Laravelコンテナとは何ですか

藏色散人
藏色散人オリジナル
2019-08-06 11:06:124241ブラウズ

Laravelコンテナとは何ですか

laravelコンテナとは何ですか? Laravel サービス コンテナとは何ですか?

Laravel ドキュメントには、Laravel サービス コンテナの概要が記載されています。

Laravel サービス コンテナは、クラスの依存関係を管理し、依存関係の注入を実行するために使用されるツールです。依存関係の注入という派手な用語は、本質的に、クラスの依存関係がコンストラクター、または場合によっては「セッター」メソッドを通じてクラスに「注入」されることを意味します。

重要なポイントを強調すると、「Laravel Service Container」はクラスの依存関係を管理し、依存関係の注入を実行するために使用されるツールです。

前のセクション「依存性注入の基本概念」の関連説明を通じて、「Laravel サービスコンテナ」が「依存性注入コンテナ」であるという単純な結論を導くことは難しくありません。

実際、Laravel に必要な依存関係の登録、バインド、解析を完了する「依存関係注入コンテナ」としてのサービス コンテナは、「Laravel サービス コンテナ」の中核機能の 1 つにすぎません。 , 「Laravel サービスコンテナ」は、Laravel アプリケーションの登録プロセスの機能の役割も果たします。

サービスコンテナに関する記事「Laravel ライフサイクルの深掘り」からの抜粋:

アプリケーション インスタンスの作成とは、Illuminate\Foundation\Application サービス コンテナをインスタンス化することを意味します。 APPコンテナ。 APPコンテナを作成するときは、アプリケーションの基本パスの登録とAPPコンテナへのパスのバインド、基本サービスプロバイダのAPPコンテナへの登録、コアコンテナのエイリアスの登録など、主に基本サービスの登録作業を完了します。 APPコンテナに。

したがって、Larvel サービス コンテナを理解するには、Illuminate\Foundation\Application のコンストラクターを学習する必要があります:

/**
     * Create a new Illuminate application instance.
     *
     * @see https://github.com/laravel/framework/blob/5.6/src/Illuminate/Foundation/Application.php#L162:27
     * @param  string|null  $basePath
     * @return void
     */
    public function __construct($basePath = null)
    {
        if ($basePath) {
            $this->setBasePath($basePath);
        }
        $this->registerBaseBindings();
        $this->registerBaseServiceProviders();
        $this->registerCoreContainerAliases();
    }

はい、Application クラスのコンストラクターは合計 3 つの操作を完了します:

registerBaseBindings() メソッドを使用して「アプリ インスタンス (Laravel サービス コンテナ)」自体を「Laravel サービス コンテナ」に登録します;

registerBaseServiceProviders() を使用して Laravel フレームワークの基本サービス プロバイダーを登録します;

registerCoreContainerAliases() を通じて、特定の「依存関係注入コンテナ」とそのエイリアスを「Laravel サービス コンテナ」に登録します。

ここで言う「登録」とは、最終的には「Laravel サービスコンテナ」の「バインド」操作を実行して、インターフェースと実装のバインドを完了することです。

テーブル名のために、 registerBaseBindings() メソッドを見てみましょう:

  /**
     * Register the basic bindings into the container. 注册 App 实例本身到 App 容器
     *
     * @return void
     */
    protected function registerBaseBindings()
    {
        static::setInstance($this);
        $this->instance('app', $this);
        $this->instance(Container::class, $this);
        $this->instance(PackageManifest::class, new PackageManifest(
            new Filesystem, $this->basePath(), $this->getCachedPackagesPath()
        ));
    }

instance() メソッドがオブジェクト インスタンス $this をコンテナーのインスタンスにバインドすることがわかっています。 app と Container::class インターフェイス。その後、app()->make('app') または app()->make(Container::class) を通じて取得された実装クラスは、$this (つまり、Laravel サービスコンテナインスタンス) オブジェクトになります。インスタンスの使用方法については、Laravel サービスコンテナの解析ドキュメントを確認してください。また、関連する使用方法についても以下に説明します。

この時点で、皆さんは「Laravel Service Container」についてより明確に理解できたと思います。

Laravel 関連の技術記事の詳細については、Laravel Framework Getting Started Tutorial 列にアクセスして学習してください。

以上がLaravelコンテナとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。