PHP イベント リスナーの実行順序は、優先順位と登録順序の両方によって決まります。 優先順位: 値が大きいほど、実行の優先順位が高くなります (範囲は -10 ~ 10)。登録順:同じ優先度のリスナーは登録順に実行されます。
#PHP イベント リスナーの実行シーケンス: 簡単に説明
#PHP イベント システムを理解する
PHP のイベント システムは、イベント リスナーを使用してイベントを処理します。リスナーは、特定のイベント タイプをサブスクライブすることによって登録され、イベントがトリガーされると、システムは登録されたリスナーを実行します。実行順序
イベント リスナーの実行順序は 2 つの要素によって決まります:Priority
リスナーの優先度はwithPriority() メソッドによって設定され、優先度の値の範囲は -10 ~ 10 、ここで:
登録シーケンス
リスナーは、addListener() または
subscribe() メソッドを通じてイベント ディスパッチャに追加されます。登録の順序は、これらのメソッドが呼び出される順序によって決まります。
実践的なケース
次のコード スニペットは、リスナー実行シーケンスの実践的なケースを示しています。use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\Event; class EventA extends Event {} class EventB extends Event {} class ListenerA implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ 'event_a' => ['onEventA', -5], 'event_b' => ['onEventB', 1], ]; } public function onEventA(EventA $event) { echo "Listener A: Event A\n"; } public function onEventB(EventB $event) { echo "Listener A: Event B\n"; } } class ListenerB implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ 'event_a' => ['onEventA', 5], 'event_b' => ['onEventB', -2], ]; } public function onEventA(EventA $event) { echo "Listener B: Event A\n"; } public function onEventB(EventB $event) { echo "Listener B: Event B\n"; } } $dispatcher = new EventDispatcher(); $dispatcher->addSubscriber(new ListenerA()); $dispatcher->addSubscriber(new ListenerB()); $dispatcher->dispatch(new EventA()); $dispatcher->dispatch(new EventB());
出力:
Listener A: Event A Listener B: Event A Listener A: Event B Listener B: Event B
ListenerB は
EventA に対して優先度が高いため、
ListenerA よりも前に実行されます。
EventB の場合、
ListenerA の方が優先度が高いため、最初に実行されます。
以上がPHPイベントリスナーの実行順序はどのように定義されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。