本文实例讲述了thinkPHP5.0框架自动加载机制。分享给大家供大家参考,具体如下:
概述
ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载。
自动加载的实现由think\Loader类库完成,自动加载规范符合PHP的PSR-4。
自动加载
由于新版ThinkPHP完全采用了命名空间的特性,因此只需要给类库正确定义所在的命名空间,而命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载。
类库的自动加载检测顺序如下:
1、类库映射检测; 2、PSR-4自动加载检测; 3、PSR-0自动加载检测;
系统会按顺序检测,一旦检测生效的话,就会自动载入对应的类库文件。
类库映射
遵循我们上面的命名空间定义规范的话,基本上可以完成类库的自动加载了,但是如果定义了较多的命名空间的话,效率会有所下降,所以,我们可以给常用的类库定义类库映射。命名类库映射相当于给类文件定义了一个别名,效率会比命名空间定位更高效,例如:
也可以利用addClassMap方法批量导入类库映射定义,例如:
虽然通过类库映射的方式注册的类可以不强制要求对应命名空间目录,但是仍然建议遵循PSR-4规范定义类库和目录。
类库导入
如果你不需要系统的自动加载功能,又或者没有使用命名空间的话,那么也可以使用think\Loader类的import方法手动加载类库文件,例如:
示例
类库导入也采用类似命名空间的概念(但不需要实际的命名空间支持),支持的“根命名空间”包括:
ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">目录 | ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">说明 | |||
---|---|---|---|---|
ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">behavior | ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">系统行为类库ottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">think | ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">核心基类库ottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">traits | ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">系统Traits类库ottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">app | ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">应用类库ottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">@ | ottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px">表示当前模块类库包
如果完全遵从系统的命名空间定义的话,一般来说无需手动加载类库文件,直接实例化即可。
Composer自动加载
5.0版本支持Composer安装的类库的自动加载,你可以直接按照Composer依赖库中的命名空间直接调用。
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》及《》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。