Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 69 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 1 |
AliasAutoloader | |
0.00% |
0 / 68 |
|
0.00% |
0 / 6 |
420 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
autoload | |
0.00% |
0 / 25 |
|
0.00% |
0 / 1 |
42 | |||
load | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
6 | |||
classTemplate | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
30 | |||
interfaceTemplate | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
12 | |||
traitTemplate | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
12 |
1 | <?php |
2 | |
3 | // FunctionsAndConstants |
4 | |
5 | namespace BrianHenryIE\Strauss { |
6 | |
7 | class AliasAutoloader |
8 | { |
9 | private string $includeFilePath; |
10 | |
11 | private array $autoloadAliases = []; |
12 | |
13 | public function __construct() |
14 | { |
15 | $this->includeFilePath = __DIR__ . '/autoload_alias.php'; |
16 | } |
17 | |
18 | public function autoload($class) |
19 | { |
20 | if (!isset($this->autoloadAliases[$class])) { |
21 | return; |
22 | } |
23 | switch ($this->autoloadAliases[$class]['type']) { |
24 | case 'class': |
25 | $this->load( |
26 | $this->classTemplate( |
27 | $this->autoloadAliases[$class] |
28 | ) |
29 | ); |
30 | break; |
31 | case 'interface': |
32 | $this->load( |
33 | $this->interfaceTemplate( |
34 | $this->autoloadAliases[$class] |
35 | ) |
36 | ); |
37 | break; |
38 | case 'trait': |
39 | $this->load( |
40 | $this->traitTemplate( |
41 | $this->autoloadAliases[$class] |
42 | ) |
43 | ); |
44 | break; |
45 | default: |
46 | // Never. |
47 | break; |
48 | } |
49 | } |
50 | |
51 | private function load(string $includeFile) |
52 | { |
53 | file_put_contents($this->includeFilePath, $includeFile); |
54 | include $this->includeFilePath; |
55 | file_exists($this->includeFilePath) && unlink($this->includeFilePath); |
56 | } |
57 | |
58 | private function classTemplate(array $class): string |
59 | { |
60 | $abstract = $class['isabstract'] ? 'abstract ' : ''; |
61 | $classname = $class['classname']; |
62 | if (isset($class['namespace'])) { |
63 | $namespace = "namespace {$class['namespace']};"; |
64 | $extends = '\\' . $class['extends']; |
65 | $implements = empty($class['implements']) ? '' |
66 | : ' implements \\' . implode(', \\', $class['implements']); |
67 | } else { |
68 | $namespace = ''; |
69 | $extends = $class['extends']; |
70 | $implements = !empty($class['implements']) ? '' |
71 | : ' implements ' . implode(', ', $class['implements']); |
72 | } |
73 | return <<<EOD |
74 | <?php |
75 | $namespace |
76 | $abstract class $classname extends $extends $implements {} |
77 | EOD; |
78 | } |
79 | |
80 | private function interfaceTemplate(array $interface): string |
81 | { |
82 | $interfacename = $interface['interfacename']; |
83 | $namespace = isset($interface['namespace']) |
84 | ? "namespace {$interface['namespace']};" : ''; |
85 | $extends = isset($interface['namespace']) |
86 | ? '\\' . implode('\\ ,', $interface['extends']) |
87 | : implode(', ', $interface['extends']); |
88 | return <<<EOD |
89 | <?php |
90 | $namespace |
91 | interface $interfacename extends $extends {} |
92 | EOD; |
93 | } |
94 | private function traitTemplate(array $trait): string |
95 | { |
96 | $traitname = $trait['traitname']; |
97 | $namespace = isset($trait['namespace']) |
98 | ? "namespace {$trait['namespace']};" : ''; |
99 | $uses = isset($trait['namespace']) |
100 | ? '\\' . implode(';' . PHP_EOL . ' use \\', $trait['use']) |
101 | : implode(';' . PHP_EOL . ' use ', $trait['use']); |
102 | return <<<EOD |
103 | <?php |
104 | $namespace |
105 | trait $traitname { |
106 | use $uses; |
107 | } |
108 | EOD; |
109 | } |
110 | } |
111 | |
112 | spl_autoload_register([ new AliasAutoloader(), 'autoload' ]); |
113 | } |