【thinkphp5分析二】ThinkPHP应用入口分析 - 深入研究ThinkPHP框架的应用入口

sockstack / 928 / 2023-07-28 22:08:29
ThinkPHP5 源码分析

ChatGPT 可用网址,仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友。
https://ckai.xyz

## 源码分析—-入口篇

源码分析

应用入口

用户发起的请求都会经过应用的入口文件,通常是public/index.php文件。当然,你也可以更改或者增加新的入口文件。

通常入口文件的代码都比较简单,一个普通的入口文件代码如下:

  1. // 应用入口文件
  2. // 定义项目路径
  3. define('APP_PATH', __DIR__ . '/../application/');
  4. // 加载框架引导文件
  5. require __DIR__ . '/../thinkphp/start.php';

一般入口文件以定义一些常量为主,支持的常量请参考后续的内容或者附录部分。

通常,我们不建议在应用入口文件中加入过多的代码,尤其是和业务逻辑相关的代码。

加载引导文件

  1. // ThinkPHP 引导文件
  2. // 1. 加载基础文件
  3. require __DIR__ . '/base.php';
  4. // 2. 执行应用
  5. App::run()->send();

加载基础文件

  1. // __DIR__ . '/base.php'文件
  2. //定义常量
  3. define('THINK_VERSION', '5.0.24');
  4. ....//常量太多省略了部分
  5. // 载入Loader类
  6. require CORE_PATH . 'Loader.php';
  7. // 加载环境变量配置文件
  8. if (is_file(ROOT_PATH . '.env')) {
  9. $env = parse_ini_file(ROOT_PATH . '.env', true);
  10. foreach ($env as $key => $val) {
  11. $name = ENV_PREFIX . strtoupper($key);
  12. if (is_array($val)) {
  13. foreach ($val as $k => $v) {
  14. $item = $name . '_' . strtoupper($k);
  15. putenv("$item=$v");
  16. }
  17. } else {
  18. putenv("$name=$val");
  19. }
  20. }
  21. }
  22. // 注册自动加载
  23. \think\Loader::register();
  24. // 注册错误和异常处理机制
  25. \think\Error::register();
  26. // 加载惯例配置文件
  27. \think\Config::set(include THINK_PATH . 'convention' . EXT);

该部分主要是定义一些系统常量,关键点是引入了自动加载类并且注册了自动加载,使得框架可以自动引入类文件,业务层只要直接use对应命名空间的类即可进行实例化,注册错误及异常处理机制, 加载默认配置等操作。

最后就是应用启动,App::run()->send();


【thinkphp5分析二】ThinkPHP应用入口分析 - 深入研究ThinkPHP框架的应用入口
作者
sockstack
许可协议
CC BY 4.0
发布于
2023-07-28
修改于
2025-04-02
Bonnie image
尚未登录