ThinkPHP 8.0 配置加载按优先级顺序为:.env 文件(最高,强制覆盖)、PHP 配置文件(app.php→route.php等→字母序自定义文件)、运行时动态配置(仅当前请求有效);多应用模式下子应用配置叠加覆盖主配置。

ThinkPHP 8.0 的配置项加载不是简单覆盖,而是有明确优先级和顺序的多层合并过程。理解这个顺序,才能准确控制环境行为(比如调试开关、数据库连接、语言设置等),避免本地配置被线上规则意外覆盖。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
环境变量(.env)拥有最高优先级.env 文件中的配置会强制覆盖所有 PHP 配置文件里的同名项。例如:
-
config/app.php中'debug' => false -
.env中APP_DEBUG=true
→ 最终生效的是true。
注意:.env必须放在项目根目录,且不能有 BOM 头;它只在应用启动早期被解析一次,修改后需重启服务(如php think run)才生效。
PHP 配置文件按目录层级和文件名顺序加载
框架按固定路径和命名规则自动加载 config/ 下的文件,顺序如下:
- 先加载
config/app.php(核心应用配置) - 再加载
config/route.php、config/middleware.php、config/database.php等常规配置 - 最后加载
config/下以字母顺序排列的自定义文件(如config/my.php、config/oss.php)
所有文件必须返回关联数组,且不能含任何输出或执行逻辑(否则启动失败)。
运行时动态配置具有临时性,不参与初始加载流程
通过代码方式设置的配置(如 Config::set('app.debug', true) 或 think\facade\Config::set())只在当前请求生命周期内有效,不会影响后续请求,也不改变已加载的配置源。它适合做条件化微调,但不能替代 .env 或 config/ 文件的结构化管理。
多应用模式下,子应用配置会叠加到主配置之上
若启用多应用('app_multi' => true),每个子应用(如 app/admin/)可自带 config/app.php,其内容会在主 config/app.php 加载后合并进去,同名键会被子应用配置覆盖。但该机制不适用于单应用模式——即使你建了 app/admin/ 目录,没开启 app_multi 就完全无效。


















