検索
ホームページバックエンド開発PHPの問題PHP における DI 依存関係の挿入を簡単に理解する

この記事では、PHP に関する関連知識を提供します。主に依存性注入に関する関連問題を紹介します。依存性注入 DI は、実際にはコンストラクターを介したクラスへの依存関係を指します。自動注入、見てみましょう, 皆様のお役に立てれば幸いです。

(推奨チュートリアル: PHP ビデオ チュートリアル)

DI/依存性注入とは

依存性注入 DI実際、これは基本的に、クラスへの依存関係がコンストラクターを通じて自動的に挿入されることを意味します。

平たく言えば、現在クラスを操作しているが、このクラスの一部のメソッドまたは関数は、このクラスでは完了できないことを意味します。このクラスだけで実行できますが、別のクラスの助けを借りてのみ実現できます。

最も直接的な兆候は、パラメーター データがオブジェクトとして渡される場合です。厳密に言えば、あるクラスを別のクラスで操作したい場合、二つのクラスの間には相互依存関係があり、パラメータを渡す方法をインジェクションと呼びます

依存性インジェクションの理由

依存関係の注入は使用されません。PHP があるクラスで別のクラスを使用する必要がある場合、多くの場合、次の操作が実行されます。

たとえば、コンテナ クラスでアダプター クラスを使用する必要がある場合、これを行う必要があります。インスタンス化

多数の外部クラスを使用する必要がある場合、結合度が高くなりすぎて、後のメンテナンスが容易に困難になる可能性があります。

素人向けに外部クラスが機能するようになりますが、これは結合度が高すぎると呼ばれます

<?php
class container
{
    private $adapter;

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

単純な依存関係の注入

上記のコードは結合度が高すぎます。主に結合を理解するために、依存関係の挿入が出現します

次の場合、操作する必要があるクラス オブジェクトを渡すだけで済みます。

依存関係のパラメーターインジェクション操作はオブジェクトであり、通常のパラメータではありません。理解は深まりましたか?

しかし、このような単純な依存性インジェクションでは、多くのクラスに依存している場合、パラメータとパラメータを渡すのに長い時間がかかります。混乱しやすいでしょう

<?php
class container
{
    private $adapter;

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

高レベルの依存性注入

上記のパラメータの混乱の問題を解決するために、現時点では依存性注入が最適化されています。

魔法のメソッドを使用して、__get でオブジェクトを設定します。

#現時点で、依存関係が多すぎてパラメーターがわかりにくいという問題は解決できます。問題

<?php
class container
{
    public $instance = [];

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

$container = new container();

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

依存関係注入の適用

最初にコンテナ クラスを定義します。これは主に、操作したいクラスをコンテナに注入するために使用されます。

使用する場合は、コンテナのオブジェクトを渡すだけです

<?php
class container
{
    public $instance = [];

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

class adapter
{
    public $name = &#39;我是调度器&#39;;
}

$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(&#39;adapter&#39;);

var_dump($who); //我是调度器

依存関係注入の高次最適化

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

これにより、すべてのオブジェクトが使用される前にインスタンス化され、結果としてリソース損失

#オブジェクトを自分で使用する必要があるときにオブジェクトがインスタンス化されたり注入されたりしないように、クロージャを渡すことができます。インスタンス化するときに、サーバー リソースの損失を減らすことができます

<?php
$container = new container();
$container->adapter = new adapter();

//高阶优化
$container = new container();
$container->adapter = function () {
    return new adapter();
};

(推奨チュートリアル:

PHP ビデオ チュートリアル )

以上がPHP における DI 依存関係の挿入を簡単に理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません