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");
 |