-
Notifications
You must be signed in to change notification settings - Fork 2
/
PEIP_Simple_Autoload.php
159 lines (142 loc) · 3.79 KB
/
PEIP_Simple_Autoload.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
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?php
/*
* This file is part of the PEIP package.
* (c) 2010 Timo Michna <timomichna/yahoo.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* PEIP_Simple_Autoload
* Class providing basic autoload features
*
* @author Timo Michna <timomichna/yahoo.de>
* @package PEIP
* @subpackage autoload
*/
class PEIP_Simple_Autoload {
protected
$baseDir = null,
$classPaths = array();
static protected
$instance;
/**
* Constructor.
*
* @access protected
*/
protected function __construct(){
$this->init();
}
/**
* Initialization method.
* Registers autoload with this class.
*
* @access protected
*/
protected function init(){
$this->baseDir = self::getBaseDirectory();
ini_set('unserialize_callback_func', 'spl_autoload_call');
if (false === spl_autoload_register(array($this, 'autoload'))){
throw new RuntimeException(sprintf('Unable to register %s::autoload as an autoloading method.', get_class($this)));
}
}
/**
* returns the autoload base directory.
* Registers autoload with this class.
*
* @access protected
* @return string the base directory
*/
protected static function getBaseDirectory(){
return str_replace(DIRECTORY_SEPARATOR, '/', realpath(dirname(__FILE__).DIRECTORY_SEPARATOR.'..'));
}
/**
* Retrieves Singleton instance
*
* @access public
* @static
* @return PEIP_Simple_Autoload
*/
static public function getInstance(){
if (!isset(self::$instance)){
self::$instance = new PEIP_Simple_Autoload();
}
return self::$instance;
}
/**
* Retrieves Singleton instance
* To be overwritten by subclasses
*
* @access protected
* @return PEIP_Simple_Autoload
*/
protected static function doGetInstance(){
return self::$instance = new PEIP_Simple_Autoload();;
}
/**
* Sets a single file-path for a class
*
* @access public
* @param string $class the class name
* @param string $path the path to the class-file
* @return void
*/
public function setClassPath($class, $path){
$this->classPaths[$class] = $path;
}
/**
* Sets all class-paths as key(class)/value(path) pairs array
*
* @access public
* @param array $classPaths class-paths as key(class)/value(path) pairs array
* @return void
*/
public function setClassPaths(array $classPaths){
$this->classPaths = $classPaths;
}
/**
* adds class-paths as key(class)/value(path) pairs array
*
* @access public
* @param array $classPaths class-paths as key(class)/value(path) pairs array
* @return void
*/
public function addClassPaths(array $classPaths){
$this->classPaths = array_merge($this->classPaths, $classPaths);
}
/**
* returns the path to a class-file (if registered)
*
* @access public
* @param string $class the class name
* @return path to the class-file
*/
public function getClassPath($class){
if (!isset($this->classPaths[$class])){
return null;
}
$file = $this->classPaths[$class];
if(!is_file($file)){
$file = $this->baseDir.DIRECTORY_SEPARATOR.$file;
}
return $file;
}
/**
* handles the autoloading of classes
*
* @access public
* @param string $class the class to load
* @return path to the class-file
*/
public function autoload($class){
$path = $this->getClassPath($class);
if (is_file($path)){
require $path;
if(class_exists($class) || interface_exists($class)){
return true;
}
}
return false;
}
}