/
autoloader.php
executable file
·60 lines (51 loc) · 1.25 KB
/
autoloader.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
class Autoload
{
protected static $spaces = array();
protected $external = '';
public function __construct($spaces, $external)
{
self::$spaces = (array) $spaces;
$this->external = (string) $external;
spl_autoload_register(array($this, 'find'), false);
spl_autoload_register(array($this, 'external'), false);
}
public function find($class)
{
$class = explode('\\', $class);
// remove main namespace from class
$common = array_shift($class);
if ($common != 'Otaku') {
return;
}
// second namespace level points to a project
$base = array_shift($class);
if (!isset(self::$spaces[$base])) {
return;
}
$className = array_pop($class);
$className = preg_split('/(?<!^)(?=[A-Z])/', $className);
$class = array_merge($class, $className);
$class = implode(SL, $class);
$class = self::$spaces[$base] . SL . $class . '.php';
if (file_exists($class)) {
require $class;
return true;
}
return false;
}
public function external($class)
{
$class = $this->external . SL . str_replace('\\', SL, $class) . '.php';
if (file_exists($class)) {
require $class;
return true;
}
return false;
}
public static function getDefaultNamespace()
{
$default = key(self::$spaces);
return 'Otaku\\' . $default;
}
}