-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAutoLoader.php
52 lines (41 loc) · 1.64 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
<?php
class Autoloader {
protected $prefixes = [];
public function register() {
spl_autoload_register([$this, 'loadClass']);
}
public function addNamespace($prefix, $baseDir) {
// Normalisiere den Präfix
$prefix = trim($prefix, '\\') . '\\';
// Normalisiere das Basisverzeichnis
$baseDir = rtrim($baseDir, DIRECTORY_SEPARATOR) . '/';
// Speichere den Präfix mit dem zugehörigen Verzeichnis
$this->prefixes[$prefix] = $baseDir;
}
public function loadClass($className) {
// Initialisiere den aktuellen Präfix
$prefix = $className;
// Durchlaufe den Klassennamen von hinten nach vorne, um den passenden Präfix zu finden
while (false !== $pos = strrpos($prefix, '\\')) {
// Teile den Präfix und den relativen Klassennamen
$prefix = substr($className, 0, $pos + 1);
$relativeClass = substr($className, $pos + 1);
// Überprüfe, ob der Präfix registriert ist
if (isset($this->prefixes[$prefix])) {
// Erstelle den Pfad zur Datei
$file = $this->prefixes[$prefix]
. str_replace('\\', '/', $relativeClass)
. '.php';
// Wenn die Datei existiert, binde sie ein
if (file_exists($file)) {
require $file;
return true;
}
}
// Entferne den letzten Namespace-Teil für den nächsten Durchlauf
$prefix = rtrim($prefix, '\\');
}
// Kein passender Präfix gefunden
return false;
}
}