自动加载Loader类
一.概述
系统会调用Loader::register()方法注册自动加载,在这一步完成后,所有符合规范的类库(包括Composer依赖加载的第三方类库)都将自动加载。
系统的自动加载由两个部分组成:
1.注册系统的自动加载方法 \think\Loader::autoload
2.注册Composer自动加载(符合Composer规范即可)
一个类库的自动加载检测顺序为:
1.是否定义类库映射;
2.Composer自动加载检测;
3.是否为注册的命名空间;
4.检测EXTEND_PATH目录下的扩展类库;
如果检测到以上任何一处,则按照PSR-4命名规范自动加载。
可以看到,定义类库映射的方式是最高效的。
二.autoload类
在Loader::autoload($class); 中打印出$class,运行如下:
可见$class为带命名空间的类名。
检测命名空间别名:有没有自动加载?
比如定义了一个类 kukiiu/Upload。给他定义一个命名空间别名org,这样我使用org/Upload类,就会用kukiiu/Upload类重新定义一个org/Upload类。
定义命名空间别名方法:
1.\think\Loader::addNamespaceAlias('org','kukiiu');
检查是否定义类库映射
打印出$map可看到里面的每项元素如下所示:
["think\App"]=> string(45) "F:\hwphp\study\thin