11
11
*/
12
12
namespace Hyperf \Di ;
13
13
14
- use Composer \Autoload \ClassLoader as ComposerClassLoader ;
15
14
use Dotenv \Dotenv ;
16
15
use Dotenv \Repository \Adapter ;
17
16
use Dotenv \Repository \RepositoryBuilder ;
24
23
25
24
class ClassLoader
26
25
{
27
- protected ComposerClassLoader $ composerClassLoader ;
28
-
29
- public function __construct (ComposerClassLoader $ classLoader , string $ proxyFileDir , string $ configDir , ScanHandlerInterface $ handler )
30
- {
31
- $ this ->setComposerClassLoader ($ classLoader );
32
- if (file_exists (BASE_PATH . '/.env ' )) {
33
- $ this ->loadDotenv ();
34
- }
35
-
36
- // Scan by ScanConfig to generate the reflection class map
37
- $ config = ScanConfig::instance ($ configDir );
38
- $ classLoader ->addClassMap ($ config ->getClassMap ());
39
-
40
- $ scanner = new Scanner ($ this , $ config , $ handler );
41
- $ classLoader ->addClassMap (
42
- $ scanner ->scan ($ classLoader ->getClassMap (), $ proxyFileDir )
43
- );
44
- }
45
-
46
- public function loadClass (string $ class ): void
47
- {
48
- $ path = $ this ->locateFile ($ class );
49
-
50
- if ($ path ) {
51
- include $ path ;
52
- }
53
- }
54
-
55
26
public static function init (?string $ proxyFileDirPath = null , ?string $ configDir = null , ?ScanHandlerInterface $ handler = null ): void
56
27
{
57
28
if (! $ proxyFileDirPath ) {
@@ -68,50 +39,26 @@ public static function init(?string $proxyFileDirPath = null, ?string $configDir
68
39
$ handler = new PcntlScanHandler ();
69
40
}
70
41
71
- $ loaders = spl_autoload_functions ();
42
+ $ composerLoader = Composer:: getLoader ();
72
43
73
- // Proxy the composer class loader
74
- foreach ($ loaders as &$ loader ) {
75
- $ unregisterLoader = $ loader ;
76
- if (is_array ($ loader ) && $ loader [0 ] instanceof ComposerClassLoader) {
77
- /** @var ComposerClassLoader $composerClassLoader */
78
- $ composerClassLoader = $ loader [0 ];
79
- $ loader [0 ] = new static ($ composerClassLoader , $ proxyFileDirPath , $ configDir , $ handler );
80
- }
81
- spl_autoload_unregister ($ unregisterLoader );
44
+ if (file_exists (BASE_PATH . '/.env ' )) {
45
+ static ::loadDotenv ();
82
46
}
83
47
84
- unset($ loader );
48
+ // Scan by ScanConfig to generate the reflection class map
49
+ $ config = ScanConfig::instance ($ configDir );
50
+ $ composerLoader ->addClassMap ($ config ->getClassMap ());
85
51
86
- // Re-register the loaders
87
- foreach ( $ loaders as $ loader ) {
88
- spl_autoload_register ( $ loader );
89
- }
52
+ $ scanner = new Scanner ( $ config , $ handler );
53
+ $ composerLoader -> addClassMap (
54
+ $ scanner -> scan ( $ composerLoader -> getClassMap (), $ proxyFileDirPath )
55
+ );
90
56
91
57
// Initialize Lazy Loader. This will prepend LazyLoader to the top of autoload queue.
92
58
LazyLoader::bootstrap ($ configDir );
93
59
}
94
60
95
- public function setComposerClassLoader (ComposerClassLoader $ classLoader ): self
96
- {
97
- $ this ->composerClassLoader = $ classLoader ;
98
- // Set the ClassLoader to Hyperf\Utils\Composer to avoid unnecessary find process.
99
- Composer::setLoader ($ classLoader );
100
- return $ this ;
101
- }
102
-
103
- public function getComposerClassLoader (): ComposerClassLoader
104
- {
105
- return $ this ->composerClassLoader ;
106
- }
107
-
108
- protected function locateFile (string $ className ): ?string
109
- {
110
- $ file = $ this ->getComposerClassLoader ()->findFile ($ className );
111
- return is_string ($ file ) ? $ file : null ;
112
- }
113
-
114
- protected function loadDotenv (): void
61
+ protected static function loadDotenv (): void
115
62
{
116
63
$ repository = RepositoryBuilder::createWithNoAdapters ()
117
64
->addAdapter (Adapter \PutenvAdapter::class)
0 commit comments