ホームページ >バックエンド開発 >PHPチュートリアル >PHPでのDI依存性注入について説明する記事

PHPでのDI依存性注入について説明する記事

青灯夜游
青灯夜游転載
2022-08-25 10:50:383521ブラウズ

DI 依存性注入とは何ですか?次の記事では、php における DI 依存関係の挿入について詳しく説明します。お役に立てば幸いです。

PHPでのDI依存性注入について説明する記事

DI/依存性インジェクションとは

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

依存性注入が使用されていない場合、

php
    あるクラス内で別のクラスを使用する必要がある場合、多くの場合、次の操作が実行されます
  • たとえば、container
  • クラスの
  • adapter クラスを使用する必要がある場合、使用する前にインスタンス化する必要があります 多数の外部クラスを使用する必要がある場合、結合度が高くなりすぎます
  • 。これにより、後の
  • メンテナンスの問題が容易に発生する可能性があります #平たく言えば、container は外部クラスなしでは動作しません。これは
  • 高結合
  • <?php
    class container
    {
        private $adapter;
    
        public function __construct()
        {
            $this->adapter = new adapter();
        }
    }
    単純な依存関係注入#と呼ばれます。

##上記のコードの結合度が高すぎるため、主に デカップリングを目的とした Dependency Injection

が出現します。 ##次の場合、操作する必要があるクラス オブジェクトを渡すだけです。
  • 依存性注入 操作のパラメーターは objects
  • しかし、このような単純な依存関係の注入では、多くのクラスに依存している場合、パラメーターを渡すときに時間がかかり、簡単に
  • confuse
  • <?php
    class container
    {
        private $adapter;
    
        public function __construct(adapter $adapter)
        {
            $this->adapter = $adapter;
        }
    }
    高レベルの依存性注入
  • 上記の
  • パラメータの混乱の問題を解決するには
現時点では、依存関係の注入は最適化されています

魔法のメソッドを通じて、__get オブジェクトを設定します

    現時点では、依存関係が多すぎて混乱するという問題を解決できます。パラメータ
  • <pre class="brush:php;toolbar:false">&lt;?php class container { public $instance = []; public function __set($name, $value) { $this-&gt;instance[$name] = $value;     } } $container = new container(); $container-&gt;adapter = new adapter(); $container-&gt;autofelix = new autofelix();</pre>
    依存性注入アプリケーション
  • 最初に、主に
  • に使用される
コンテナ クラス

を定義します。 操作したいクラス

をコンテナに注入します この時、コンテナ
  • <?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); //我是调度器
    object を渡すだけです依存性注入の高度な最適化
  • 上記のアプリケーションでは、インスタンス化されたオブジェクトを
  • 直接
インスタンス化されたオブジェクトをコンテナに注入します

これにより、すべてのオブジェクトが発生します。使用される前にインスタンス化されるため、 リソース損失が発生します。 Loss

  • クロージャ に渡すことで、オブジェクトがインスタンス化されて注入されないようにすることができます。自分で使用し、再度インスタンス化する必要があります。これにより、
  • サーバー リソースの損失が軽減されます
  • <?php
    $container = new container();
    $container->adapter = new adapter();
    
    //高阶优化
    $container = new container();
    $container->adapter = function () {
        return new adapter();
    };
  • 推奨される学習: 「
  • PHP ビデオ チュートリアル

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

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