appName . 'Controller'; if (!isset(self::$loaded[$module])) { if (Autoloader::exists($class) !== false) { try { $obj = new $class($app); self::$loaded[$module] = $obj; self::registerRequesting($obj); self::registerProvided($obj); } catch (\Throwable $e) { self::$loaded[$module] = new NullModule($app); } } else { self::$loaded[$module] = new NullModule($app); } } return self::$loaded[$module]; } /** * Load modules this module is requesting from * * @param ModuleAbstract $obj Current module * * @return void * * @since 1.0.0 */ private static function registerRequesting(ModuleAbstract $obj) : void { $providings = $obj->getProviding(); foreach ($providings as $providing) { if (isset(self::$loaded[$providing])) { self::$loaded[$providing]->addReceiving($obj->getName()); } else { self::$providing[$providing][] = $obj->getName(); } } } /** * Register modules this module is receiving from * * @param ModuleAbstract $obj Current module * * @return void * * @since 1.0.0 */ private static function registerProvided(ModuleAbstract $obj) : void { $name = $obj->getName(); if (isset(self::$providing[$name])) { foreach (self::$providing[$name] as $providing) { $obj->addReceiving($providing); } } } }