Autoloader.php
<?php
namespace ROF;
class Autoloader
{
static protected $isRegistered = false;
static protected $dirs = [];
static public function addDir($dir,...$baseNamespaces){
if (!static::$isRegistered){
static::$isRegistered = true;
spl_autoload_register([get_class(),'loadClass']);
}
static::$dirs[$dir] = $baseNamespaces;
}
static public function loadClass($class){
foreach (static::$dirs as $dir=>$namespaces){
$namespaces[] = '';
foreach ($namespaces as $ns){
if ($ns!=''&&strpos($class,$ns)!==0)continue;
$classPath = str_replace('\\','/',substr($class,strlen($ns))).'.php';
if (file_exists($file = $dir.'/'.$classPath)){
require_once($file);
} else {
//DEBUG
// echo $file."\n";
}
}
}
}
// /**
// * A bad, old implementation... don't use it
// *
// * @param mixed $baseDirectory
// * @param mixed $staticInitializer
// * @param mixed $throw
// * @return void
// */
// public static function enable($baseDirectory = null, $staticInitializer = true, $throw = true)
// {
// if ($baseDirectory == null) {
// $baseDirectory = $_SERVER['DOCUMENT_ROOT'] . '/Class';
// }
// spl_autoload_register(
// function ($class) use ($baseDirectory, $staticInitializer, $throw) {
// if (strpos($class, '\\') !== false) {
// $class = str_replace('\\', '/', $class);
// }
// $classFile = $baseDirectory . '/' . $class . '.php';
// if (file_exists($classFile)) {
// include $classFile;
// if ($staticInitializer == true && method_exists($class, '__initialize')) {
// call_user_func(array($class, '__initialize'));
// }
// } else {
// $message = "Error auto-loading class '" . $class . "' from file '{$classFile}' with base directory '{$baseDirectory}'";
// if ($throw) {
// throw new \Exception($message);
// } else {
// error_log($message);
// }
// }
// }
// );
// }
}