zendframework イベント管理 (1)

WBOY
リリース: 2016-08-04 08:53:14
オリジナル
1171 人が閲覧しました

zend のイベント マネージャーは主に次のことを達成します:

1. オブザーバーモード

2. セクション指向のデザイン

3. イベント駆動型アーキテクチャ

イベント管理の最も基本的な機能は、リスナーをイベントに接続または切断することです。接続されているか切断されているかに関係なく、共有コレクションを通じてイベントがトリガーされ、割り込みリスナーの実行がトリガーされます。

リーリー

EventManager はイベントのトリガーに特に関心があり、イベントをトリガーする最も基本的な方法は、trigger() メソッドを使用することです。

リーリー

trigger() メソッドが実際にイベントをトリガーする動作をtriggerListeners() メソッドに委譲していることがわかります

トリガーは 3 つのパラメーター (イベント名、ターゲット、パラメーター) を受け入れます

trigger メソッドはイベントのインスタンスを作成し、イベントをトリガーします。トリガーは、setName などのいくつかのトランケータを呼び出します。これらのメソッドは Event クラスにあり、主にターゲット環境と渡されるパラメータをカプセル化するために使用されます。

ターゲットに関して、公式 Web サイトで言及されているのは通常、現在のオブジェクト インスタンスです。実際には、イベントをトリガーする要素です。イベントの識別子として理解できます

パラメータはイベントに提供されるパラメータで、通常は現在の関数またはメソッドに渡されるパラメータです。

例:

リーリー

前に述べたように、EventManager はイベントをトリガーすることだけに関心があります。ここでのトリガー イベントは、誰がこのイベントを聞いているか、つまり誰がリスナーであるかのみを考慮します。

リスナーは EventManager に接続し、名前付きイベントとコールバック関数を指定して、関連メッセージを通知します (関連メッセージとは何ですか? 通知したいメッセージです)。コールバック関数は Event オブジェクトを受け取る必要があります。Event オブジェクトのゲッターはイベントの名前、ターゲット、パラメーターを取得できます (前のコード例には setName があり、その逆も同様です)。

コード例

リーリー
attach() の 2 番目のパラメータには、呼び出し可能な有効な PHP 関数、匿名関数、または関数名、

functor、静的関数を指す文字列、、、、 を使用できます。

場合によっては、新しいリスナーを作成したいが、新しいイベントは作成したくない場合があります。したがって、以前に作成したイベントを使用したい場合は、以前のイベントを共有に設定する必要があります (つまり、共有可能、イベントは複数のリスナーを持つことができます)。この目的は、SharedEventManager を通じて達成できます。

ZendEventManagerSharedEventManagerInterface は、複数のリスナーを集約するオブジェクトを記述します。これらのリスナーは、識別子を使用して 1 つ以上のイベントに接続されます。 SharedEventManager はこれらのイベントをトリガーしません。逆に、EventManager は SharedEventManager を結合し、次に ShareEventManager にクエリを実行して同じ ID を持つリスナーを取得し、それをトリガーします。

リーリー
以前と比較すると、上記のコードのアタッチ関数は最初のパラメータ「Foo」を追加しています。これは、このリスナーのターゲットが Foo、イベントが bar、他のターゲットについては私のところに来ないことを意味します。

最初にイベントを作成したときは、setIdentifiers()を使用しました。この関数は、ロゴであるターゲットを設定します。

以前はShareEventManagerを使って共有されるリスナーを登録していました。注: イベントは共有されませんが、リスナーは共有されます。あとは、イベント Foo にリスナーを使用できることを伝えるだけです。次のコードを使用します:

リーリー
コードの最後で、bar イベントをトリガーします。これにより、上記のイベントがトリガーされます。結果はここでは説明しません。

SubFoo を使用して Foo クラスを継承した場合でも、SubFoo の bar() は共有イベントをトリガーします。その理由は、Foo の setIndentifiers() で get_class($this) と __CLASS__ を同時に渡したためです。 SubFoo でこのメソッドを呼び出すと、これら 2 つのパラメータはそれぞれ SubFoo と Foo を返します (__CLASS__ はパラメータなしの get_class() と同等です)。

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