72 lines
1.2 KiB
PHP
72 lines
1.2 KiB
PHP
<?php declare(strict_types = 1);
|
|
/**
|
|
* Container for dispatchers.
|
|
*
|
|
* @package query-monitor
|
|
*/
|
|
|
|
/**
|
|
* @implements \IteratorAggregate<string, QM_Dispatcher>
|
|
*/
|
|
class QM_Dispatchers implements IteratorAggregate {
|
|
|
|
/**
|
|
* @var array<string, QM_Dispatcher>
|
|
*/
|
|
private $items = array();
|
|
|
|
/**
|
|
* @return ArrayIterator<string, QM_Dispatcher>
|
|
*/
|
|
#[\ReturnTypeWillChange]
|
|
public function getIterator() {
|
|
return new ArrayIterator( $this->items );
|
|
}
|
|
|
|
/**
|
|
* @param QM_Dispatcher $dispatcher
|
|
* @return void
|
|
*/
|
|
public static function add( QM_Dispatcher $dispatcher ) {
|
|
$dispatchers = self::init();
|
|
$dispatchers->items[ $dispatcher->id ] = $dispatcher;
|
|
}
|
|
|
|
/**
|
|
* @param string $id
|
|
* @return QM_Dispatcher|false
|
|
*/
|
|
public static function get( $id ) {
|
|
$dispatchers = self::init();
|
|
|
|
return $dispatchers->items[ $id ] ?? false;
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public static function cease() {
|
|
$dispatchers = self::init();
|
|
|
|
/** @var QM_Dispatcher $dispatcher */
|
|
foreach ( $dispatchers as $dispatcher ) {
|
|
$dispatcher->cease();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return self
|
|
*/
|
|
public static function init() {
|
|
static $instance;
|
|
|
|
if ( ! $instance ) {
|
|
$instance = new QM_Dispatchers();
|
|
}
|
|
|
|
return $instance;
|
|
|
|
}
|
|
|
|
}
|