name; } public function getDescription(): string { return $this->description; } public function getIcon(): string { return $this->icon; } public function getAuthor(): string { return $this::AUTHOR; } public function getVersion(): string { return $this::VERSION; } final public function normalize() { return [ 'name' => $this->getName(), 'description' => $this->getDescription(), 'icon' => $this->getIcon(), 'version' => $this->getVersion(), 'author' => $this->getAuthor(), '_vendor' => Modules::getModuleVendor( $this ), '_module' => Modules::getModuleName( $this ), '_package' => Modules::getModulePackageName( $this ), ]; } final static function isModule( $class ): bool { return $class instanceof ModuleModel; } #[Ignore] final public function getClassLocator(): string { return static::_getClassLocator(); } final public static function _getClassLocator(): string { return Modules::getModulePackageName( static::class ); } }