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 サイトの他の関連記事を参照してください。