loader.php作用,Loader.php

## 注册自动加载机制

注册自动加载机制文件位于`thinkphp/library/think/Loader.php`,在`base.php`文件中,调用了`register()`方法,具体内容如下:

```

/**

* 注册自动加载机制

* @access public

* @param callable $autoload 自动加载处理方法

* @return void

*/

public static function register($autoload = null)

{

// 1. spl_autoload_register 函数是注册给定的函数作为 __autoload 的实现

spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true);

// Composer 自动加载支持

// 2. VENDOR_PATH = /WWW/tp5/vendor/ , 检查/WWW/tp5/vendor/composer是否存在,默认存在

if (is_dir(VENDOR_PATH . 'composer')) {

// 3. php版本必须大于5.6, /WWW/tp5/vendor/composer/autoload_static.php 必须存在

if (PHP_VERSION_ID >= 50600 && is_file(VENDOR_PATH . 'composer' . DS . 'autoload_static.php')) {

require VENDOR_PATH . 'composer' . DS . 'autoload_static.php';

// 4. get_declared_classes 函数返回由已定义类的名字所组成的数组

$declaredClass = get_declared_classes();

/*

print_r($declaredClass);

Array

(

[0] => stdClass

[1] => stdClass

[2] => Exception

[3] => ErrorException

[4] .... other defined classes....

[143] => XSLTProcessor

[144] => think\Loader

[145] => Composer\Autoload\ComposerStaticInit2bc4f313dba415539e266f7ac2c87dcd

)

*/

// 5. 获取composer类, array_pop 函数是弹出数组最后一个单元(出栈)

$composerClass = array_pop($declaredClass);

/*

print_r($composerClass);

Composer\Autoload\ComposerStaticInit2bc4f313dba415539e266f7ac2c87dcd

*/

foreach (['prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'files'] as $attr) {

// 6. property_exists 函数是检查对象或类是否具有该属性, 并创建当前实例类的属性

if (property_exists($composerClass, $attr)) {

self::${$attr} = $composerClass::${$attr};

}

}

} else {

// 可以暂时忽略此代码逻辑

self::registerComposerLoader();

}

}

/*

print_r(self::$prefixLengthsPsr4);

Array

(

[t] => Array

(

[think\worker\] => 13

[think\oracle\] => 13

[think\mongo\] => 12

[think\migration\] => 16

[think\helper\] => 13

[think\composer\] => 15

[think\captcha\] => 14

[think\] => 6

)

[a] => Array

(

[app\] => 4

)

[W] => Array

(

[Workerman\] => 10

)

[P] => Array

(

[Phinx\] => 6

)

)

*/

// 7. 注册命名空间定义, 框架默认只有 think, traits, 没有behavior

self::addNamespace([

'think' => LIB_PATH . 'think' . DS,

'behavior' => LIB_PATH . 'behavior' . DS,

'traits' => LIB_PATH . 'traits' . DS,

]);

// 8. 加载类库映射文件, 可以忽略(默认没这文件)

if (is_file(RUNTIME_PATH . 'classmap' . EXT)) {

self::addClassMap(__include_file(RUNTIME_PATH . 'classmap' . EXT));

}

// 9. 加载composer自动加载文件

self::loadComposerAutoloadFiles();

// 自动加载 extend 目录

self::$fallbackDirsPsr4[] = rtrim(EXTEND_PATH, DS); // /WWW/tp5/extend/

/*

print_r(self::$fallbackDirsPsr4);

Array

(

[0] => /mnt/d/phpStudy/PHPTutorial/WWW/tp5/extend

)

*/

}

```

![](https://img.kancloud.cn/1d/69/1d69987e7818d0a091dd33c8f91b8eea_793x576.png)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值