loaded = array(); $this->db = NULL; } /** * Loads a $type of object from a $dir with a given $name * @param string $name - the name of the object to load * @param string $dir - the directory theese objects are stored in * @param string $type - the type of the object */ private function load_type($name, $dir, $type): object|NULL { $path = $dir . '/' . $name . '.php'; if (array_key_exists($path, $this->loaded)) { return $this->loaded[$path]; } if (!file_exists($path)) { return NULL; } $parts = explode('/', $name); $part = end($parts); $class = ucfirst($part) . '_' . $type; require($path); $ref = NULL; try { $ref = new ReflectionClass($class); } catch (Exception $_e) {} if ($ref === NULL) { return NULL; } $obj = $ref->newInstance($this); $this->loaded[$path] = $obj; return $obj; } /** * Loads a model * @param string $name - the name of the model to load */ public function model($name): object|NULL { $root = $GLOBALS['webroot']; $dir = $root . '/_model'; return $this->load_type($name, $dir, 'model'); } /** * Loads a controller * @param string $name - the name of the controller to load */ public function controller($name): Controller|NULL { $root = $GLOBALS['webroot']; $dir = $root . '/_controller'; return $this->load_type($name, $dir, 'controller'); } /** * Loads the given common lang */ public function lang(): void { $dir = $GLOBALS['webroot'] . '/lang/'; $lang = $GLOBALS['lang']; if ($handle = opendir($dir)) { while (false !== ($entry = readdir($handle))) { if ($entry === '.' || $entry === '..' || $entry === 'apps') { continue; } $path = $dir . $entry; require($path); } } $GLOBALS['lang'] = $lang; } /** * Loads a given app specific lang * @param string $name - the name of the app */ public function app_lang($name): void { $dir = $GLOBALS['webroot'] . '/lang/apps/'; $file = $dir . $name . '.php'; if (file_exists($file)) { $lang = $GLOBALS['lang']; require($dir . $name . '.php'); $GLOBALS['lang'] = $lang; } } public function db(): DatabaseHelper { if ($this->db) { return $this->db; } else { $this->db = new DatabaseHelper(); return $this->db; } } }