*/ private array $modules = []; public static function instance(): self { return self::$instance ??= new self(); } public function register( ModuleDefinition $module ): void { $this->modules[ $module->slug ] = $module; } /** * @return ModuleDefinition[] */ public function all(): array { return array_values( $this->modules ); } public function get( string $slug ): ?ModuleDefinition { return $this->modules[ $slug ] ?? null; } public function update_screen_id( string $slug, string $screen_id ): void { if ( isset( $this->modules[ $slug ] ) ) { $this->modules[ $slug ]->screen_id = $screen_id; } } /** * @return ModuleDefinition[] */ public function for_screen( string $screen_id ): array { return array_values( array_filter( $this->modules, static fn ( ModuleDefinition $module ): bool => $module->screen_id === $screen_id ) ); } }