*/ class QM_Dispatchers implements IteratorAggregate { /** * @var array */ private $items = array(); /** * @return ArrayIterator */ #[\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; } }