thinkphp 学习资料

本文详细解析了ThinkPHP框架的自动加载过程,包括Composer自动加载、命名空间注册、类库映射文件加载和extend目录的自动加载。通过这些机制,ThinkPHP能够智能地找到并加载项目中所需的类库,简化开发过程。
摘要由CSDN通过智能技术生成

一、类的自动加载

核心文件    '/library/think/Loader.php'  

1、Composer自动加载支持

// Composer自动加载支持
if (is_dir(self::$composerPath)) {  //如果存在$composerPath这个目录
    if (is_file(self::$composerPath . 'autoload_static.php')) {//该目录下的autoload_static.php
        require self::$composerPath . 'autoload_static.php';
        $declaredClass = get_declared_classes();

        $composerClass = array_pop($declaredClass);

        foreach (['prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'files'] as $attr) {
//autoload_static.php  下面有$prefixLengthsPsr4和$prefixDirsPsr4  这两个里面的都可以自动加载  
            if (property_exists($composerClass, $attr)) {
                self::${$attr} = $composerClass::${$attr};

            }
        }
    } else {
        self::registerComposerLoader(self::$composerPath);
    }

}

如果相关的类库不是通过Composer自动自动安装,而是直接复制的代码就可以通过修改autoload_static.php这个文件实现自动加载

 2、注册命名空间定义

self::addNamespace([
            'think'  => __DIR__,
            'traits' => dirname(__DIR__) . DIRECTORY_SEPARATOR . 'traits',
        ]);

讲白了就是加载了tp的核心类库 thinkphp\library\ 下的 think和traits两个核心类库,如果以后有相关的类库放在这个目录下面可以通过修改这段代码实现自动加载

 3、加载类库映射文件

 if (is_file($rootPath . 'runtime' . DIRECTORY_SEPARATOR . 'classmap.php')) {
            self::addClassMap(__include_file($rootPath . 'runtime' . DIRECTORY_SEPARATOR . 'classmap.php'));
        }

类库的映射文件可以通过下面的命令进行自动生成,

>php think optimize:autoload

 如果有修改或者新增记得要更新相关

 4、自动加载extend目录

  self::addAutoLoadDir($rootPath . 'extend');

如果自己新建了某个类库文件夹,想要事项自动加载,可以在这个下面进行引入

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值