ホームページ  >  記事  >  バックエンド開発  >  DI 依存関係の注入と phalapi のシングルトン実装

DI 依存関係の注入と phalapi のシングルトン実装

*文
*文オリジナル
2017-12-23 16:48:331863ブラウズ

単利モデルと依存性注入については多くの人がよく知っていると思います。この記事では、phalapi の DI 依存性注入とシングルトン モードを中心に説明します。依存性注入とシングルトン モードに興味がある学生は参照してください。

1. シングルトン モード

シングルトン モードは、オブジェクト指向プログラミングを長く学習している子供たちには馴染みのないものではありません。シングルトンとは何かについて簡単に説明します。モードとはどのようなもので、どのような問題が解決され、PhalApi でどのように実装されるのかを示します。

Singleton シングルトン、いわゆるシングルトンとは、存在するものが 1 つだけであることを意味します。使用するリソースが 1 つだけであるため、その利点を参照してください。クラスを使用するには、新しいオブジェクトが作成されるたびに、そのインスタンスを格納するための領域がメモリ内に生成される必要があることは誰もが知っています。プログラムの 1 回の実行で多数の新しいインスタンスが使用される場合、同じオブジェクトが同じオブジェクトに変換されると、より多くのリソースが消費されますが、グローバル変数を使用するユニバーサル プログラムの場合は、エレガントで煩雑になります。この場合、シングルトン モードが生成されます。


シングルトン モードは、両方の長所を備えています。第 2 に、多くのリソースを占有することを心配する必要がありません。これは非常にエレガントです。PhalApi でシングルトン モードを実装する方法を見てみましょう:

//大家看到我们常用的DI方法内部实现的是PhalApi_DI中的静态方法one方法
function DI() {
    return PhalApi_DI::one();
}

次に、1 つのメソッドの内部を見てみましょう


リクエストするときは常に、最初に静的変数インスタンスが初期化されていないことを確認します。最初の呼び出しの場合は、PhalApi_DI クラスを内部でインスタンス化し、$instance に負の値を与えて返します。次回リクエストすると、この静的変数はインスタンス化されているため、インスタンス化はスキップされます。このオブジェクトを直接処理して返します。これは、PhalApi フレームワークのすべての場所で使用される DI です。メソッドは実際にはオブジェクトであり、コードは次のとおりです。難しいことではありません。 new を使用して、クラスの操作を new が必要なクラスの静的メソッドにカプセル化して、上記と同じ判断を行うだけで、簡単にシングルトン モードを実装できます。依存性注入

依存性注入は「制御の反転」とも呼ばれます。JavaWeb 開発の Spring フレームワークに慣れている場合は、より深く理解できるはずです。ここでは詳しく説明しませんが、実装について簡単に説明します。この設計パターンがどのように実装され、これに基づいて遅延読み込みメカニズムが実装されているかを誰もが理解できるように、PhalApi での DI 依存関係注入の実装

PhalApi で一般的に使用される DI() メソッドは次のとおりです。上記のいわゆるシングルトン モードを採用します。言うまでもなく、DI() を使用するたびに、実際には PhalApi_DI クラスが使用されます。そのため、依存関係の注入の鍵となるのは PhalApi_DI です

まず説明します。その実装メソッドの 1 つを見てから、具体的な実装について説明しましょう:

public static function one(){
    if(self::$instance == NULL){
        self::$instance = new PhalApi_DI();
        self::$instance->onConstruct();
    }
    return self::$instance;
}

実際、内部には config をキーとして使用する配列があります。新しい PhalApi_Config_File(API_ROOT . '/Config') を考えてみましょう。次回 DI->config->get(); を使用すると、キー値 config に基づいて新しいクラスが取得されるため、config 操作は DI に依存していると言えます。 ()、DI()->config を使用すると、常にインスタンスが使用されるため、リソースの消費も削減できます。

なぜ DI()->config が配列に保存されるのかに興味を持つ子供もいます。興味のある方は、Baidu で魔法の方法を検索してください

//配置
DI()->config = new PhalApi_Config_File(API_ROOT . '/Config');

これを読んだら、将来自分でも使えるようになると思いませんか?


2.2 遅延ロード

PhalApi の DI() メソッドは、文字通り、クラスが使用されていない場合にはロードされないことを意味します。この操作は、使用していないときは決してインスタンス化せず、このクラスを新規作成して使用する方法を見てみましょう。実装されています。

以上がDI 依存関係の注入と phalapi のシングルトン実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。