63 lines
1.2 KiB
PHP
63 lines
1.2 KiB
PHP
<?php
|
|
class Loader {
|
|
protected static array $dirs = [
|
|
"LIB_MIGRATIONS_DIR",
|
|
"LIB_TASKS_DIR",
|
|
"LIB_TEMPLATE_DIR",
|
|
"LIB_LIB_DIR",
|
|
"TASKS_DIR",
|
|
"TEMPLATE_DIR",
|
|
"LIB_DIR"
|
|
];
|
|
|
|
protected static $classmap = [];
|
|
|
|
public static function _autoload($class) {
|
|
|
|
if (count(self::$classmap) === 0) {
|
|
self::buildRecursiveClassMap();
|
|
}
|
|
|
|
if (isset(self::$classmap[$class])) {
|
|
require_once(self::$classmap[$class]);
|
|
return;
|
|
}
|
|
}
|
|
|
|
protected static function buildRecursiveClassMap() {
|
|
foreach (self::$dirs as $dir) {
|
|
if (!defined($dir)) {
|
|
continue;
|
|
}
|
|
|
|
$dir = constant($dir);
|
|
|
|
if (!is_dir($dir) || !is_readable($dir)) {
|
|
continue;
|
|
}
|
|
|
|
self::buildClassMap($dir);
|
|
}
|
|
}
|
|
|
|
protected static function buildClassMap($dir) {
|
|
$files = scandir($dir);
|
|
foreach ($files as $file) {
|
|
if ($file === "." || $file === "..") {
|
|
continue;
|
|
}
|
|
if (is_dir($file)) {
|
|
self::buildClassMap($file);
|
|
} else {
|
|
$parts = explode(".", $file);
|
|
$ext = array_pop($parts);
|
|
if ($ext === "php") {
|
|
$classname = array_shift($parts);
|
|
self::$classmap[$classname] = $dir . "/" . $file;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
spl_autoload_register("Loader::_autoload");
|