Laravel で制御反転を実装する方法についての詳細な説明

PHPz
リリース: 2023-04-14 17:20:27
オリジナル
655 人が閲覧しました

Laravel は人気のある PHP 開発フレームワークであり、その制御反転 (IoC) コンテナは最も強力な機能の 1 つです。

制御の反転により、開発者はオブジェクトのライフサイクルと依存関係をより柔軟に管理できるようになり、オンデマンドでアクセスできるようになります。 Laravelでは、制御反転コンテナはService ContainerとFacadeから構成されます。

この記事では、Laravel での制御の反転の実装について詳しく説明し、それを使用してアプリケーション内のオブジェクトと依存関係を管理する方法を説明します。

サービスコンテナ

サービスコンテナはLaravel IoCの中核部分です。これにより、ライフサイクルを管理しながら、依存関係を登録し、インスタンス化された依存関係を取得できます。

Laravel では、次の方法でコンテナに依存関係を登録できます。

  1. インスタンスをバインドする

Use $app -> instance()このメソッドはオブジェクトをコンテナにバインドし、必要なときにいつでもアクセスできるようにします。

例:

$app->instance('foo', new Foo);
ログイン後にコピー

これで、次の方法でコンテナから foo インスタンスを取得できるようになります:

$foo = $app->make('foo');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  1. バインディングの実装

$app->bind() メソッドを使用して、クラスをコンテナにバインドします。

例:

$app->bind('foo', 'Foo');
ログイン後にコピー

これで、次の方法でコンテナから foo インスタンスを取得できます。

$foo = $app->make('foo');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これにより、新しい Foo が返されます。 クラスのインスタンス。

  1. Bind singleton

$app->singleton() メソッドを使用して、アクセスごとにクラスをコンテナにバインドすると、常に同じインスタンス。

例:

$app->singleton('foo', 'Foo');
ログイン後にコピー

これで、次の方法でコンテナから foo インスタンスを取得できるようになります:

$foo = $app->make('foo');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これは常に同じ Foo を返します クラスインスタンス。

Facade

Facade は Laravel のもう 1 つの重要な概念であり、静的構文を通じてサービス コンテナ内のオブジェクトにアクセスできるようになります。

Laravel では、Facade は __callStatic() マジック メソッドを使用して、すべてのメソッド呼び出しをサービス コンテナに渡し、インスタンス化されたオブジェクトをコンテナから取得します。これは制御の反転です。

たとえば、次のメソッドを使用して、Laravel の View インスタンス (これはサービス コンテナに登録されたクラス) にアクセスできます。

// 通过Facade语法
return View::make('welcome');
ログイン後にコピー

これにより、自動的に ## が呼び出されます。 #View Facade の __callStatic() メソッドを呼び出し、コンテナを通じて View インスタンス化されたオブジェクトを返します。

制御の反転は実際にどのように機能するのでしょうか?

コンテナからインスタンスをリクエストすると、サービス コンテナはクラスまたはインスタンスが登録されているかどうかを確認し、すでに登録されている場合はインスタンスを直接返します。そうでない場合は、依存関係を自動的に解決してインスタンスを作成しようとします。必要なオブジェクト。

Laravel コントロール反転コンテナはリフレクション (Reflection) を使用して依存関係を自動的に解決します。つまり、コンストラクターを通じて依存関係をクラスに渡すと、コンテナーはリフレクションを使用して依存関係を自動的にインスタンス化し、コンストラクターに注入します。

例:

class MyClass {

  protected $foo;

  public function __construct(Foo $foo) {
    $this->foo = $foo;
  }

}
ログイン後にコピー
コンテナから

MyClass インスタンス化されたオブジェクトをリクエストすると、コンテナは MyClass Foo が必要であることを自動的に検出します。 インスタンスなので、Foo クラスは自動的にインスタンス化され、MyClass コンストラクターに挿入されます。

結論

Laravel Inversion of Controlコンテナは、開発者がアプリケーション内のオブジェクトと依存関係をより適切に管理できるようにする非常に強力なツールです。この記事では、サービス コンテナとファサードの実装を検討し、制御の反転がどのように機能するかを理解します。

この記事がお役に立ち、Laravel でのコントロール コンテナの反転実装についての理解を深めることができれば幸いです。

以上がLaravel で制御反転を実装する方法についての詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート