ホームページ  >  記事  >  バックエンド開発  >  PHP 依存関係注入の概要の共有

PHP 依存関係注入の概要の共有

WBOY
WBOY転載
2022-04-13 13:01:596637ブラウズ

この記事では、PHP に関する関連知識を提供します。主に、依存性注入とは何か、依存性注入の理由、依存性注入のアプリケーションなど、依存性注入に関連する問題を紹介します。皆さんのお役に立てれば幸いです。

PHP 依存関係注入の概要の共有

推奨学習: 「PHP ビデオ チュートリアル

1 つの記事PHP の依存性注入を理解する. 多くの人は、PHP を一定期間学習した後、依存性注入という用語を聞くでしょうが、それについてはほとんど理解していません. 依存性注入は実際には PHP プログラミングの設計パターンであることは理解していますが、まだ理解されていませんデザイン パターンはプログラミングの効率化のために存在し、依存関係の注入は確かに行われます。

1. 依存性注入 (DI) とは

  • 依存性注入 (DI) は本質的に、コンストラクターを介したクラスへの依存関係の自動注入を指します
  • 平たく言えば、現在クラスを操作しているが、このクラスの一部のメソッドや関数はこのクラスだけでは完成できず、別のクラスの助けを借りて完成させる必要があることを意味します
  • 最も直接的な兆候は、パラメーター データがオブジェクトとして渡される場合です。厳密に言うと、別のクラスで別のクラスを操作したいのですが、二つのクラスの間には相互依存関係があり、パラメータを渡す方法をインジェクションと呼びます

II 、その理由依存関係の注入が表示されます

  • 最初に、PHP が 1 つのクラス内で別のクラスを使用する必要がある場合、次の操作を実行します。
  • たとえば、コンテナーを使用する場合 Ifアダプター クラスはクラス内で使用する必要があり、使用前にインスタンス化する必要があります。
  • 多数の外部クラスを使用する必要がある場合、結合度が高くなりすぎて、後のメンテナンスが困難になりやすい
  • 平たく言えば、コンテナは外部クラスなしでは動作できないことを意味し、これを高結合と呼びます
  • #
<?php
class container
{
    private $adapter;

    public function __construct()
    {
        $this->adapter = new adapter();
    }
}

3. 単純な依存性注入

    上記のコードの結合度が高すぎるため、主に結合を理解するために依存性注入が発生します。
  • 以下に示すように、必要なのは操作する必要があるクラス オブジェクトを渡します。
  • 依存関係注入操作のパラメーターはオブジェクトであり、通常のパラメーターではありません。よく理解できましたか?
  • しかし、このような単純な依存関係は、多くのクラスに依存している場合、インジェクションによってパラメータを渡すのに時間がかかり、混乱しやすくなります。
<?php
class container
{
    private $adapter;

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

4. 高レベルの依存関係インジェクション

    上記のパラメータの混乱の問題を解決するために、この時点で依存性注入が進化しました。
  • マジックメソッドを通じて、__get はオブジェクトを設定します
  • マジック メソッドについて少しでも知っている場合は、以前の記事を参照してください: php でのマジック メソッドの詳細な説明
  • 現時点では、依存関係が多すぎてパラメーターがわかりにくいという問題は解決できます
<?php
class container
{
    public $instance = [];

    public function __set($name, $value)
    {
        $this->instance[$name] = $value;
    }
}

$container = new container();

$container->adapter = new adapter();

5. 依存関係注入の適用

    まず、コンテナ クラスを定義します。これは主に、操作したいクラスをコンテナに注入するために使用されます。
<?php
class container
{
    public $instance = [];

    public function __set($name, $value)
    {
        $this->instance[$name] = $value;
    }
}

class adapter
{
    public $name = '我是调度器';
}

$container = new container();
$container->adapter = new adapter();

class autofelix
{
    private $container;

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

    public function who($class)
    {
        return $this->container->instance[$class]->name;
    }
}

$autofelix = new autofelix($container);

$who = $autofelix->who('adapter');

var_dump($who); //我是调度器
  • 6. 高次の最適化

    上記のアプリケーションでは、直接、コンテナ オブジェクトを渡す必要があります。インスタンス化されたオブジェクトをコンテナに注入します。

      これにより、すべてのオブジェクトがそのまま残ります。使用されない場合、再度インスタンス化され、リソースの損失が発生します。
    • クロージャに渡すことができます。オブジェクトはインスタンス化および挿入されないことを確認してください。オブジェクトを使用する必要がある場合は、再度インスタンス化してください。
    • サーバー リソースの損失を軽減できます
    <?php
    $container = new container();
    $container->adapter = new adapter();
    
    //高阶优化
    $container = new container();
    $container->adapter = function () {
        return new adapter();
    };
  • 推奨学習: "
  • PHP ビデオ チュートリアル "

    以上がPHP 依存関係注入の概要の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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