View file application/system/library/class.bootstrap.php

File size: 1.13Kb
<?PHP
	class Bootstrap {
		const CORE_NAMESPACE = 'Focus';
		private $namespaces = [];
		
		public function register() {
			spl_autoload_register([$this, 'loader'], true, true);
		}
		
		public function loader($className) {
			$classNameParts = explode('\\', $className);

			if (stripos($className, '\\') !== false) {
				$className = array_pop($classNameParts);
				$namespace = implode('\\', $classNameParts);
			}
			else {
				$namespace = self::CORE_NAMESPACE;
			}
			
			if(array_key_exists($namespace, $this->namespaces)) {
				$directories = $this->namespaces[$namespace];
				$classFileName = 'class.' . strtolower($className) . '.php';

				foreach($directories as $directory) {
					if(file_exists($directory . $classFileName)) {
						require_once $directory . $classFileName;
						return true;
					}
				}

				throw new Exception("Class $className not found!");
			}
		}
		
		public function addNamespace($namespace, $directories) {
			if(is_array($directories)) {
				$this->namespaces[$namespace] = $directories;
			}
			else {
				$this->namespaces[$namespace] = [$directories];
			}
		}
	}