改名
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace Snowflake\Events;
|
||||
|
||||
class EventDispatch
|
||||
{
|
||||
|
||||
private EventListener $eventListener;
|
||||
|
||||
|
||||
/**
|
||||
* @param $event
|
||||
* @param array $params
|
||||
*/
|
||||
public function emit($event, array $params = [])
|
||||
{
|
||||
$events = $this->eventListener->getEventListeners($event);
|
||||
if (empty($events)) {
|
||||
return;
|
||||
}
|
||||
while ($events->valid()) {
|
||||
/** @var EventDispatchInterface $interface */
|
||||
$interface = $events->current();
|
||||
$interface->onHandler();
|
||||
if ($interface->stopPagination()) {
|
||||
break;
|
||||
}
|
||||
$events->next();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Snowflake\Events;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
interface EventDispatchInterface
|
||||
{
|
||||
|
||||
public function getZOrder(): int;
|
||||
|
||||
public function onHandler(): void;
|
||||
|
||||
public function stopPagination(): bool;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace Snowflake\Events;
|
||||
|
||||
use SplPriorityQueue;
|
||||
|
||||
class EventListener
|
||||
{
|
||||
|
||||
/** @var SplPriorityQueue[] */
|
||||
private array $_events = [];
|
||||
|
||||
|
||||
/**
|
||||
* @param $event
|
||||
* @param EventDispatchInterface $handler
|
||||
*/
|
||||
public function on($event, EventDispatchInterface $handler)
|
||||
{
|
||||
if (!isset($this->_events[$event])) {
|
||||
$this->_events[$event] = new SplPriorityQueue();
|
||||
}
|
||||
$this->_events[$event]->insert($handler, $handler->getZOrder());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $event
|
||||
* @return SplPriorityQueue|null
|
||||
*/
|
||||
public function getEventListeners($event): ?SplPriorityQueue
|
||||
{
|
||||
return $this->_events[$event] ?? null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Snowflake\Events;
|
||||
|
||||
class EventProviders
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user