From 4c2a08c3e6c86a7da160cea21fa8f0e08b2e6d46 Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 01:45:41 -0400 Subject: [PATCH 01/12] remove reduntant EventDispatcher::$instance description --- flight/core/EventDispatcher.php | 1 - 1 file changed, 1 deletion(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index 8e60d1a..947d60a 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -6,7 +6,6 @@ namespace flight\core; class EventDispatcher { - /** @var self|null Singleton instance of the EventDispatcher */ private static ?self $instance = null; /** @var array> */ From 3066c5dcc459a790ac414f477eccbe29924206c7 Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 01:46:10 -0400 Subject: [PATCH 02/12] simplify EventDispatcher listeners typehint --- flight/core/EventDispatcher.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index 947d60a..98e79fb 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -8,7 +8,7 @@ class EventDispatcher { private static ?self $instance = null; - /** @var array> */ + /** @var array */ protected array $listeners = []; /** From 8d29ad4fd005e6f2cf46ff7b33ebaa3a591e77c2 Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 01:47:07 -0400 Subject: [PATCH 03/12] remove reduntant EventDispatcher@getInstance description --- flight/core/EventDispatcher.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index 98e79fb..1c84d26 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -11,16 +11,12 @@ class EventDispatcher /** @var array */ protected array $listeners = []; - /** - * Singleton instance of the EventDispatcher. - * - * @return self - */ public static function getInstance(): self { if (self::$instance === null) { self::$instance = new self(); } + return self::$instance; } From 3723228c3de7e81bf492eb29bde8dbebc847060d Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 01:49:24 -0400 Subject: [PATCH 04/12] simplify EventDispatcher@on --- flight/core/EventDispatcher.php | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index 1c84d26..a7e2f75 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -20,17 +20,9 @@ class EventDispatcher return self::$instance; } - /** - * Register a callback for an event. - * - * @param string $event Event name - * @param callable $callback Callback function - */ public function on(string $event, callable $callback): void { - if (isset($this->listeners[$event]) === false) { - $this->listeners[$event] = []; - } + $this->listeners[$event] ??= []; $this->listeners[$event][] = $callback; } From f7b2736736e1f463a7b0bf6235fb16ada2dfb417 Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 01:56:53 -0400 Subject: [PATCH 05/12] simplify EventDispatcher@trigger --- flight/core/EventDispatcher.php | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index a7e2f75..3476192 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -27,27 +27,24 @@ class EventDispatcher } /** - * Trigger an event with optional arguments. - * - * @param string $event Event name - * @param mixed ...$args Arguments to pass to the callbacks - * + * @param mixed ...$args Arguments to pass to the listeners. * @return mixed */ public function trigger(string $event, ...$args) { - $result = null; - if (isset($this->listeners[$event]) === true) { - foreach ($this->listeners[$event] as $callback) { - $result = call_user_func_array($callback, $args); + $listenerReturnValue = null; + + if (isset($this->listeners[$event])) { + foreach ($this->listeners[$event] as $listener) { + $listenerReturnValue = $listener(...$args); - // If you return false, it will break the loop and stop the other event listeners. - if ($result === false) { - break; // Stop executing further listeners + if ($listenerReturnValue === false) { + break; } } } - return $result; + + return $listenerReturnValue; } /** From 0d50ed97d671160c58e79f591df6dbe9c8c4046e Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 01:58:22 -0400 Subject: [PATCH 06/12] use early returns in EventDispatcher@trigger --- flight/core/EventDispatcher.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index 3476192..cf361ca 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -34,13 +34,15 @@ class EventDispatcher { $listenerReturnValue = null; - if (isset($this->listeners[$event])) { - foreach ($this->listeners[$event] as $listener) { - $listenerReturnValue = $listener(...$args); + if (!isset($this->listeners[$event])) { + return null; + } + + foreach ($this->listeners[$event] as $listener) { + $listenerReturnValue = $listener(...$args); - if ($listenerReturnValue === false) { - break; - } + if ($listenerReturnValue === false) { + break; } } From 6bc62d9b0ce6bc6a9cf7082a204573abb802561f Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 02:00:25 -0400 Subject: [PATCH 07/12] simplify EventDispatcher@hasListeners --- flight/core/EventDispatcher.php | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index cf361ca..b264a1a 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -49,16 +49,13 @@ class EventDispatcher return $listenerReturnValue; } - /** - * Check if an event has any registered listeners. - * - * @param string $event Event name - * - * @return bool True if the event has listeners, false otherwise - */ public function hasListeners(string $event): bool { - return isset($this->listeners[$event]) === true && count($this->listeners[$event]) > 0; + return ( + isset($this->listeners[$event]) + && is_array($this->listeners[$event]) + && count($this->listeners[$event]) + ); } /** From 4abcd23e117c82c7841ea23f88f22c705ae98aba Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 02:01:21 -0400 Subject: [PATCH 08/12] use EventDispatcher@hasListeners in trigger --- flight/core/EventDispatcher.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index b264a1a..054dc75 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -34,7 +34,7 @@ class EventDispatcher { $listenerReturnValue = null; - if (!isset($this->listeners[$event])) { + if (!$this->hasListeners($event)) { return null; } From 361e45e9743c1f4b12792528a4e72ffdcd596eaa Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 02:03:00 -0400 Subject: [PATCH 09/12] simplify EventDispatcher@getListeners --- flight/core/EventDispatcher.php | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index 054dc75..4f5c71a 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -34,11 +34,7 @@ class EventDispatcher { $listenerReturnValue = null; - if (!$this->hasListeners($event)) { - return null; - } - - foreach ($this->listeners[$event] as $listener) { + foreach ($this->getListeners($event) as $listener) { $listenerReturnValue = $listener(...$args); if ($listenerReturnValue === false) { @@ -58,13 +54,7 @@ class EventDispatcher ); } - /** - * Get all listeners registered for a specific event. - * - * @param string $event Event name - * - * @return array Array of callbacks registered for the event - */ + /** @return callable[] */ public function getListeners(string $event): array { return $this->listeners[$event] ?? []; From 6c22bad3f0e9428799a584d33a5150e44daf6b61 Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 02:04:34 -0400 Subject: [PATCH 10/12] remove redundant explanation of EventDispatcher@getAllRegisteredEvents --- flight/core/EventDispatcher.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index 4f5c71a..6884d33 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -60,11 +60,7 @@ class EventDispatcher return $this->listeners[$event] ?? []; } - /** - * Get a list of all events that have registered listeners. - * - * @return array Array of event names - */ + /** @return string[] */ public function getAllRegisteredEvents(): array { return array_keys($this->listeners); From 4cb50f66ab8b442d7167800cbe1a1f6316f5cc1d Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 02:09:14 -0400 Subject: [PATCH 11/12] simplify EventDispatcher@removeListener --- flight/core/EventDispatcher.php | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index 6884d33..3b66a2c 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -66,22 +66,16 @@ class EventDispatcher return array_keys($this->listeners); } - /** - * Remove a specific listener for an event. - * - * @param string $event the event name - * @param callable $callback the exact callback to remove - * - * @return void - */ public function removeListener(string $event, callable $callback): void { - if (isset($this->listeners[$event]) === true && count($this->listeners[$event]) > 0) { - $this->listeners[$event] = array_filter($this->listeners[$event], function ($listener) use ($callback) { - return $listener !== $callback; - }); - $this->listeners[$event] = array_values($this->listeners[$event]); // Re-index the array + if (!$this->hasListeners($event)) { + return; } + + $this->listeners[$event] = array_values(array_filter( + $this->getListeners($event), + static fn(callable $listener): bool => $listener !== $callback, + )); } /** From cd3d8bb44ef3cdf4cc170b60f02ce92a0f5126d2 Mon Sep 17 00:00:00 2001 From: fadrian06 Date: Sun, 16 Aug 2026 02:10:49 -0400 Subject: [PATCH 12/12] simplify EventDispatcher@removeAllListeners and resetInstance --- flight/core/EventDispatcher.php | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/flight/core/EventDispatcher.php b/flight/core/EventDispatcher.php index 3b66a2c..1a63731 100644 --- a/flight/core/EventDispatcher.php +++ b/flight/core/EventDispatcher.php @@ -78,25 +78,11 @@ class EventDispatcher )); } - /** - * Remove all listeners for a specific event. - * - * @param string $event the event name - * - * @return void - */ public function removeAllListeners(string $event): void { - if (isset($this->listeners[$event]) === true) { - unset($this->listeners[$event]); - } + unset($this->listeners[$event]); } - /** - * Remove the current singleton instance of the EventDispatcher. - * - * @return void - */ public static function resetInstance(): void { self::$instance = null;