-
Notifications
You must be signed in to change notification settings - Fork 5
/
SplClassLoader.php
93 lines (82 loc) · 2.59 KB
/
SplClassLoader.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
<?php
/**
* This file is part of the FurryBear package. For the full copyright and
* license information, please view the LICENSE file that was distributed with
* this source code.
*/
/**
* SplClassLoader implements the autoloader interoperability standard PSR-0.
*
* Example:
* <code>
* $classLoader = new SplClassLoader(__DIR__ . '/../src');
* $classLoader->register();
* </code>
*
* @author lobostome <lobostome@local.dev>
* @package FurryBear
* @link https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
*/
class SplClassLoader {
/**
* The path to the library.
*
* @var string
*/
protected $_path = null;
/**
* The namespace separator string.
*
* @var string
*/
protected $_namespaceSeparator = null;
/**
* The extension of the php file.
*
* @var string
*/
protected $_fileExtension = null;
/**
* Creates a new SplClassLoader that loads classes of the specified
* path, extension, and namespace.
*
* @param string $path The path to the library.
* @param string $nsSeparator The namespace separator string.
* @param string $ext The extension of the php file.
*/
public function __construct($path = null, $nsSeparator = '\\', $ext = '.php')
{
$this->_path = $path;
$this->_namespaceSeparator = $nsSeparator;
$this->_fileExtension = $ext;
}
/**
* Installs this class loader on the SPL autoload stack.
*/
public function register()
{
spl_autoload_register(array($this, 'furrybear_autoload'));
}
/**
* Loads the given class or interface.
*
* @param string $className The name of the class to load.
*/
public function furrybear_autoload($className)
{
$className = ltrim($className, $this->_namespaceSeparator);
$fileName = '';
$namespace = '';
if (false !== ($lastNsPos = strripos($className, $this->_namespaceSeparator))) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . $this->_fileExtension;
$f = ($this->_path !== null ? $this->_path . DIRECTORY_SEPARATOR : '') . $fileName;
if (!file_exists($f)) {
throw new \FurryBear\Common\Exception\FileDoesNotExistException('File does not exist ' . $f);
}
require $f;
}
}