ThinkPHP5源码学习篇--base.php

本文详细解析了ThinkPHP5框架base.php的运行过程,包括Loader.php中的自动加载机制,Error.php中的错误处理,以及convention.php的框架惯例配置。内容涵盖了Loader::register()方法的实现,Error类的注册及错误处理,以及配置文件的层次结构和优先级。
摘要由CSDN通过智能技术生成

base.php运行过程解析

功能有以下三点

  1. 定义系统运行常量
  2. 引入Loader类
  3. 注册自动加载类、注册异常处理类、引入管理配置信息

对应四行代码

require CORE_PATH . 'Loader.php';
\think\Loader::register();
\think\Error::register();
\think\Config::set(include THINK_PATH . 'convention' . EXT);

Loader.php

常量定义就在这里不重复了。
先来说说Loader.php,从文件名称上也能大概猜到是与加载功能相关,其类内部存在与composer相似的定义变量,这里不列举,为了存储命名空间的映射等信息。

列举下内部调用方法,逐个说明稍微有点多。

Loader::register()方法

//注册系统自动加载 加载方法为类内部的autoload方法,同时设置若无法注册则抛出异常,并添加函数到队列首部
spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true);

//判断vendor内部是否存在composer目录,一般都是存在的,如果没有,我们也最好养成使用composer的习惯。
if (PHP_VERSION_ID >= 50600 && is_file(VENDOR_PATH . 'composer' . DS . 'autoload_static.php')) {

	//判断PHP的版本号和autoload_static.php文件存在
	require VENDOR_PATH . 'composer' . DS . 'autoload_static.php';
	
	//因为composer/autoload_static.php内包含类的类名是无规则的,所以通过查找declared类并通过array_pop出栈操作获取
    $declaredClass = get_declared_classes();
    $composerClass = array_pop($declaredClass);
    
    //property_exists — 检查对象或类是否具有该属性
    foreach (['prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'files'] as $attr) {
         //若如上几个静态属性存在,则复制到当前类,用于后续的自动加载
          if (property_exists($composerClass, $attr)) {
              self::${$attr} = $composerClass::${$attr};
          }
    }
}

autoload_static.php已包含指定文件composer实现的自动加载规则&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值