首页 > 代码库 > thinkphp5 源码分析二 框架引导
thinkphp5 源码分析二 框架引导
框架引导文件源代码 (/thinkphp/start.php)
1. 引入基础文件(/thinkphp/base.php)
// 加载基础文件 require __DIR__ . ‘/base.php‘;
基础文件(/thinkphp/base.php)
2. 定义系统常量
1 define(‘THINK_VERSION‘, ‘5.0.9‘); 2 define(‘THINK_START_TIME‘, microtime(true)); 3 define(‘THINK_START_MEM‘, memory_get_usage()); 4 define(‘EXT‘, ‘.php‘); 5 define(‘DS‘, DIRECTORY_SEPARATOR); 6 defined(‘THINK_PATH‘) or define(‘THINK_PATH‘, __DIR__ . DS); 7 define(‘LIB_PATH‘, THINK_PATH . ‘library‘ . DS); 8 define(‘CORE_PATH‘, LIB_PATH . ‘think‘ . DS); 9 define(‘TRAIT_PATH‘, LIB_PATH . ‘traits‘ . DS); 10 defined(‘APP_PATH‘) or define(‘APP_PATH‘, dirname($_SERVER[‘SCRIPT_FILENAME‘]) . DS); 11 defined(‘ROOT_PATH‘) or define(‘ROOT_PATH‘, dirname(realpath(APP_PATH)) . DS); 12 defined(‘EXTEND_PATH‘) or define(‘EXTEND_PATH‘, ROOT_PATH . ‘extend‘ . DS); 13 defined(‘VENDOR_PATH‘) or define(‘VENDOR_PATH‘, ROOT_PATH . ‘vendor‘ . DS); 14 defined(‘RUNTIME_PATH‘) or define(‘RUNTIME_PATH‘, ROOT_PATH . ‘runtime‘ . DS); 15 defined(‘LOG_PATH‘) or define(‘LOG_PATH‘, RUNTIME_PATH . ‘log‘ . DS); 16 defined(‘CACHE_PATH‘) or define(‘CACHE_PATH‘, RUNTIME_PATH . ‘cache‘ . DS); 17 defined(‘TEMP_PATH‘) or define(‘TEMP_PATH‘, RUNTIME_PATH . ‘temp‘ . DS); 18 defined(‘CONF_PATH‘) or define(‘CONF_PATH‘, APP_PATH); // 配置文件目录 19 defined(‘CONF_EXT‘) or define(‘CONF_EXT‘, EXT); // 配置文件后缀 20 defined(‘ENV_PREFIX‘) or define(‘ENV_PREFIX‘, ‘PHP_‘); // 环境变量的配置前缀 21 // 环境常量 22 define(‘IS_CLI‘, PHP_SAPI == ‘cli‘ ? true : false); 23 define(‘IS_WIN‘, strpos(PHP_OS, ‘WIN‘) !== false);
3. 载入Loader类(/thinkphp/library/think/Loader.php)
// 载入Loader类 require CORE_PATH . ‘Loader.php‘;
4. 加载环境变量配置文件(/.env)
1 // 加载环境变量配置文件 2 if (is_file(ROOT_PATH . ‘.env‘)) { 3 $env = parse_ini_file(ROOT_PATH . ‘.env‘, true); 4 foreach ($env as $key => $val) { 5 $name = ENV_PREFIX . strtoupper($key); 6 if (is_array($val)) { 7 foreach ($val as $k => $v) { 8 $item = $name . ‘_‘ . strtoupper($k); 9 putenv("$item=$v"); 10 } 11 } else { 12 putenv("$name=$val"); 13 } 14 } 15 }
5. 注册自动加载
// 注册自动加载 \think\Loader::register();
Loader类(/thinkphp/library/think/Loader.php)
6. 注册系统自动加载
// 注册系统自动加载 spl_autoload_register($autoload ?: ‘think\\Loader::autoload‘, true, true);
7. 注册命名空间定义
1 // 注册命名空间定义 2 self::addNamespace([ 3 ‘think‘ => LIB_PATH . ‘think‘ . DS, 4 ‘behavior‘ => LIB_PATH . ‘behavior‘ . DS, 5 ‘traits‘ => LIB_PATH . ‘traits‘ . DS, 6 ]);
注册的命名空间
8. 加载类库映射文件(/runtime/classmap.php)
1 // 加载类库映射文件 2 if (is_file(RUNTIME_PATH . ‘classmap‘ . EXT)) { 3 self::addClassMap(__include_file(RUNTIME_PATH . ‘classmap‘ . EXT)); 4 }
9. composer自动加载(/vendor/composer/)
1 // Composer自动加载支持 2 if (is_dir(VENDOR_PATH . ‘composer‘)) { 3 self::registerComposerLoader(); 4 }
10. 自动加载extend目录(/extend)
// 自动加载extend目录 self::$fallbackDirsPsr4[] = rtrim(EXTEND_PATH, DS);
11. 注册错误和异常处理机制(/thinkphp/library/think/Error.php)
1 // 报告所有错误 2 error_reporting(E_ALL); 3 //设置用户自定义的错误处理程序 4 set_error_handler([__CLASS__, ‘appError‘]); 5 // 设置用户定义的异常处理函数 6 set_exception_handler([__CLASS__, ‘appException‘]); 7 //定义PHP程序执行完成后执行的函数 8 register_shutdown_function([__CLASS__, ‘appShutdown‘]);
12. 加载惯例配置文件(/thinkphp/convention.php)
1 // 加载惯例配置文件 2 \think\Config::set(include THINK_PATH . ‘convention‘ . EXT);
thinkphp5 源码分析二 框架引导
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。