-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClassLoader.php
More file actions
executable file
·134 lines (119 loc) · 2.53 KB
/
ClassLoader.php
File metadata and controls
executable file
·134 lines (119 loc) · 2.53 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
/**
* @package framework
* @copyright Copyright (c) 2005-2020 The Regents of the University of California.
* @license http://opensource.org/licenses/MIT MIT
*/
namespace Qubeshub\Base;
/**
* Class loader for non PSR-4 classes
*
* This can autoload PSR-4 classes or cases where the class
* name maps to a lowercase path:
*
* Components\Example\Models\Entry
* -> /components/example/models/entry.php
*
* Inspired by Laravel 4's autoloader
*/
class ClassLoader
{
/**
* The registered directories.
*
* @var array
*/
protected static $directories = array();
/**
* Indicates if a ClassLoader has been registered.
*
* @var bool
*/
protected static $registered = false;
/**
* Load the given class file.
*
* @param string $class
* @return bool
*/
public static function load($class)
{
$class = static::normalizeClass($class);
foreach (static::$directories as $directory)
{
if (file_exists($path = $directory . DIRECTORY_SEPARATOR . $class))
{
require_once $path;
return true;
}
if (file_exists($path = $directory . DIRECTORY_SEPARATOR . strtolower($class)))
{
require_once $path;
return true;
}
}
return false;
}
/**
* Get the normal file name for a class.
*
* @param string $class
* @return string
*/
public static function normalizeClass($class)
{
if ($class[0] == '\\')
{
$class = substr($class, 1);
}
return str_replace(array('\\', '_'), DIRECTORY_SEPARATOR, $class) . '.php';
}
/**
* Register the given class loader on the auto-loader stack.
*
* @return void
*/
public static function register()
{
if (!static::$registered)
{
static::$registered = spl_autoload_register(array('\Hubzero\Base\ClassLoader', 'load'));
}
}
/**
* Add directories to the class loader.
*
* @param string|array $directories
* @return void
*/
public static function addDirectories($directories)
{
static::$directories = array_unique(array_merge(static::$directories, (array) $directories));
}
/**
* Remove directories from the class loader.
*
* @param string|array $directories
* @return void
*/
public static function removeDirectories($directories = null)
{
if (is_null($directories))
{
static::$directories = array();
}
else
{
static::$directories = array_diff(static::$directories, (array) $directories);
}
}
/**
* Gets all the directories registered with the loader.
*
* @return array
*/
public static function getDirectories()
{
return static::$directories;
}
}