-
Notifications
You must be signed in to change notification settings - Fork 133
/
Copy pathLoad.php
90 lines (82 loc) · 2.36 KB
/
Load.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
<?php
/********************************************
* Easy PHP *
* *
* A lightweight PHP framework for studying *
* *
* TIERGB *
* <https://github.com/TIGERB> *
* *
********************************************/
namespace Framework;
use Framework\App;
use Framework\Exceptions\CoreHttpException;
/**
* 注册加载handle
*
* @author TIERGB <https://github.com/TIGERB>
*/
class Load
{
/**
* 类名映射
*
* @var array
*/
public static $map = [];
/**
* 类命名空间映射
*
* @var array
*/
public static $namespaceMap = [];
/**
* 应用启动注册.
*
* @param App $app 框架实例
* @return mixed
*/
public static function register(App $app)
{
self::$namespaceMap = [
'Framework' => $app->rootPath
];
// 注册框架加载函数 不使用composer加载机制加载框架 自己实现
spl_autoload_register(['Framework\Load', 'autoload']);
// 引入composer自加载文件
require($app->rootPath . '/vendor/autoload.php');
}
/**
* 自加载函数
*
* @param string $class 类名
*
* @return void
*/
private static function autoload($class)
{
$classOrigin = $class;
$classInfo = explode('\\', $class);
$className = array_pop($classInfo);
foreach ($classInfo as &$v) {
$v = strtolower($v);
}
unset($v);
array_push($classInfo, $className);
$class = implode('\\', $classInfo);
$path = self::$namespaceMap['Framework'];
$classPath = $path . '/'.str_replace('\\', '/', $class) . '.php';
/**
* [tideways optimize]
* 通过tideways分析file_exists性能消耗偏多 注释掉 文件不存在 直接底层异常
* 此处性能提升10ms左右
*/
// if (!file_exists($classPath)) {
// // 框架级别加载文件不存在 composer加载
// return;
// throw new CoreHttpException(404, "$classPath Not Found");
// }
self::$map[$classOrigin] = $classPath;
require $classPath;
}
}