Skip to content

Commit

Permalink
Additional refactoring in removeListener() and removeServiceListener()
Browse files Browse the repository at this point in the history
  • Loading branch information
Dragonrun1 committed Jul 31, 2016
1 parent 853b2de commit 339172d
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 18 deletions.
31 changes: 20 additions & 11 deletions src/AbstractContainerMediator.php
Expand Up @@ -179,17 +179,7 @@ public function removeServiceListener(string $eventName, array $listener, $prior
}
$key = array_search($listener, $listeners, true);
if (false !== $key) {
unset($this->serviceListeners[$eventName][$atPriority][$key]);
// Remove empty priorities.
if (0 === count($this->serviceListeners[$eventName][$atPriority])) {
unset($this->serviceListeners[$eventName][$atPriority]);
}
// Remove empty events.
if (0 === count($this->serviceListeners[$eventName])) {
unset($this->serviceListeners[$eventName]);
$key = array_search($eventName, $this->loadedServices, true);
unset($this->loadedServices[$key]);
}
$this->bubbleUpUnsetServiceListener($eventName, $atPriority, $key);
if ('first' === $priority) {
break;
}
Expand Down Expand Up @@ -263,6 +253,25 @@ protected function getActualPriority(string $eventName, $priority): int
}
return (int)$priority;
}
/**
* @param string $eventName
* @param int $priority
* @param int $key
*/
private function bubbleUpUnsetServiceListener(string $eventName, int $priority, int $key)
{
unset($this->serviceListeners[$eventName][$priority][$key]);
// Remove empty priorities.
if (0 === count($this->serviceListeners[$eventName][$priority])) {
unset($this->serviceListeners[$eventName][$priority]);
}
// Remove empty events.
if (0 === count($this->serviceListeners[$eventName])) {
unset($this->serviceListeners[$eventName]);
$key = array_search($eventName, $this->loadedServices, true);
unset($this->loadedServices[$key]);
}
}
/**
* @param $listener
*
Expand Down
23 changes: 16 additions & 7 deletions src/Mediator.php
Expand Up @@ -146,13 +146,7 @@ public function removeListener(string $eventName, callable $listener, $priority
}
$key = array_search($listener, $listeners, true);
if (false !== $key) {
unset($this->listeners[$eventName][$atPriority][$key]);
if (0 === count($this->listeners[$eventName][$atPriority])) {
unset($this->listeners[$eventName][$atPriority]);
}
if (0 === count($this->listeners[$eventName])) {
unset($this->listeners[$eventName]);
}
$this->bubbleUpUnsetListener($eventName, $atPriority, $key);
if ('first' === $priority) {
break;
}
Expand Down Expand Up @@ -285,6 +279,21 @@ protected function walkEventList(array $events, callable $callback)
}
}
}
/**
* @param string $eventName
* @param int $priority
* @param int $key
*/
private function bubbleUpUnsetListener(string $eventName, int $priority, int $key)
{
unset($this->listeners[$eventName][$priority][$key]);
if (0 === count($this->listeners[$eventName][$priority])) {
unset($this->listeners[$eventName][$priority]);
}
if (0 === count($this->listeners[$eventName])) {
unset($this->listeners[$eventName]);
}
}
/**
* @param string $eventName
*
Expand Down

0 comments on commit 339172d

Please sign in to comment.