zend のイベント マネージャーは主に次のことを達成します:
1. オブザーバーモード
2. セクション指向のデザイン
3. イベント駆動型アーキテクチャ
イベント管理の最も基本的な機能は、リスナーをイベントに接続または切断することです。接続されているか切断されているかに関係なく、共有コレクションを通じてイベントがトリガーされ、割り込みリスナーの実行がトリガーされます。
EventManager はイベントのトリガーに特に関心があり、イベントをトリガーする最も基本的な方法は、trigger() メソッドを使用することです。
trigger() メソッドが実際にイベントをトリガーする動作をtriggerListeners() メソッドに委譲していることがわかります
トリガーは 3 つのパラメーター (イベント名、ターゲット、パラメーター) を受け入れます
trigger メソッドはイベントのインスタンスを作成し、イベントをトリガーします。トリガーは、setName などのいくつかのトランケータを呼び出します。これらのメソッドは Event クラスにあり、主にターゲット環境と渡されるパラメータをカプセル化するために使用されます。
ターゲットに関して、公式 Web サイトで言及されているのは通常、現在のオブジェクト インスタンスです。実際には、イベントをトリガーする要素です。イベントの識別子として理解できます
パラメータはイベントに提供されるパラメータで、通常は現在の関数またはメソッドに渡されるパラメータです。
例:
前に述べたように、EventManager はイベントをトリガーすることだけに関心があります。ここでのトリガー イベントは、誰がこのイベントを聞いているか、つまり誰がリスナーであるかのみを考慮します。
リスナーは EventManager に接続し、名前付きイベントとコールバック関数を指定して、関連メッセージを通知します (関連メッセージとは何ですか? 通知したいメッセージです)。コールバック関数は Event オブジェクトを受け取る必要があります。Event オブジェクトのゲッターはイベントの名前、ターゲット、パラメーターを取得できます (前のコード例には setName があり、その逆も同様です)。
コード例リーリー
functor、静的関数を指す文字列、、、、 を使用できます。
場合によっては、新しいリスナーを作成したいが、新しいイベントは作成したくない場合があります。したがって、以前に作成したイベントを使用したい場合は、以前のイベントを共有に設定する必要があります (つまり、共有可能、イベントは複数のリスナーを持つことができます)。この目的は、SharedEventManager を通じて達成できます。ZendEventManagerSharedEventManagerInterface は、複数のリスナーを集約するオブジェクトを記述します。これらのリスナーは、識別子を使用して 1 つ以上のイベントに接続されます。 SharedEventManager はこれらのイベントをトリガーしません。逆に、EventManager は SharedEventManager を結合し、次に ShareEventManager にクエリを実行して同じ ID を持つリスナーを取得し、それをトリガーします。
リーリー
最初にイベントを作成したときは、setIdentifiers()を使用しました。この関数は、ロゴであるターゲットを設定します。
以前はShareEventManagerを使って共有されるリスナーを登録していました。注: イベントは共有されませんが、リスナーは共有されます。あとは、イベント Foo にリスナーを使用できることを伝えるだけです。次のコードを使用します:
リーリー
SubFoo を使用して Foo クラスを継承した場合でも、SubFoo の bar() は共有イベントをトリガーします。その理由は、Foo の setIndentifiers() で get_class($this) と __CLASS__ を同時に渡したためです。 SubFoo でこのメソッドを呼び出すと、これら 2 つのパラメータはそれぞれ SubFoo と Foo を返します (__CLASS__ はパラメータなしの get_class() と同等です)。