十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章给大家分享的是有关thinkPHP5.0框架自动加载机制的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
创新互联是一家集网站建设,恩阳企业网站建设,恩阳品牌网站建设,网站定制,恩阳网站建设报价,网络营销,网络优化,恩阳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。概述
ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载。
自动加载的实现由think\Loader类库完成,自动加载规范符合PHP的PSR-4。
自动加载
由于新版ThinkPHP完全采用了命名空间的特性,因此只需要给类库正确定义所在的命名空间,而命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载。
类库的自动加载检测顺序如下:
1、类库映射检测;
2、PSR-4自动加载检测;
3、PSR-0自动加载检测;
系统会按顺序检测,一旦检测生效的话,就会自动载入对应的类库文件。
类库映射
遵循我们上面的命名空间定义规范的话,基本上可以完成类库的自动加载了,但是如果定义了较多的命名空间的话,效率会有所下降,所以,我们可以给常用的类库定义类库映射。命名类库映射相当于给类文件定义了一个别名,效率会比命名空间定位更高效,例如:
Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php'); Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');
也可以利用addClassMap方法批量导入类库映射定义,例如:
$map = [ 'think\Log' => LIB_PATH.'think\Log.php', 'org\util\array'=> LIB_PATH.'org\util\Array.php' ]; Loader::addClassMap($map);
虽然通过类库映射的方式注册的类可以不强制要求对应命名空间目录,但是仍然建议遵循PSR-4规范定义类库和目录。
类库导入
如果你不需要系统的自动加载功能,又或者没有使用命名空间的话,那么也可以使用think\Loader类的import方法手动加载类库文件,例如:
Loader::import('org.util.array'); Loader::import('@.util.upload');
示例
// 引入 extends/qrcode.php Loader::import('qrcode', EXTEND_PATH); // 助手函数 import('qrcode', EXTEND_PATH); // 引入 extends/wechat-sdk/wechat.class.php Loader::import('wechat-sdk.wechat', EXTEND_PATH, '.class.php'); // 助手函数 import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');
类库导入也采用类似命名空间的概念(但不需要实际的命名空间支持),支持的“根命名空间”包括:
目录 | 说明 |
---|---|
behavior | 系统行为类库 |
think | 核心基类库 |
traits | 系统Traits类库 |
app | 应用类库 |
@ | 表示当前模块类库包 |
如果完全遵从系统的命名空间定义的话,一般来说无需手动加载类库文件,直接实例化即可。
Composer自动加载
5.0版本支持Composer安装的类库的自动加载,你可以直接按照Composer依赖库中的命名空间直接调用。
感谢各位的阅读!关于“thinkPHP5.0框架自动加载机制的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!