ThinkPHP 5.0 配置优先级由加载顺序决定,后加载覆盖先加载:惯例配置(convention.php)→应用配置(config.php)→扩展配置(extra/*.php)→场景配置(APP_STATUS.php)→调试配置(debug.php,仅APP_DEBUG=true)→模块配置(module/config.php)→动态配置(config()设置),.env需手动引入,runtime/config.php为缓存快照。

ThinkPHP 5.0 的配置文件优先级本质是加载顺序的逆序:后加载的配置会覆盖先加载的同名配置项。整个过程是合并(array_merge_recursive 不完全适用,实际为递归覆盖式合并)而非叠加,关键在于“谁最后写入,谁生效”。
以下是明确、可验证的加载顺序(从低优先级 → 高优先级):
惯例配置
thinkphp/convention.php
框架内置默认值,仅作兜底,不建议直接修改。应用配置
application/config.php
项目级主配置,覆盖惯例配置;多数全局设置(如app_debug、default_module)在此定义。扩展配置(extra)
application/extra/*.php(如database.php、user.php)
按文件名自动加载,合并进主配置空间(如config('database.host')),优先级高于config.php中的同名二级键。场景配置
application/{APP_STATUS}.php(如home.php、test.php)
仅当app_status值匹配且该文件存在时才加载,覆盖应用和扩展配置。调试配置(条件加载)
thinkphp/conf/debug.php(仅当APP_DEBUG = true时加载)
用于开发期增强提示、日志等,优先级高于场景配置。模块配置
application/{module}/config.php(如application/index/config.php)
访问对应模块时才加载,覆盖所有前述层级的同名配置项(如config('app_name')在模块 config 中重定义即生效)。动态配置(运行时)
通过config('key', 'value')或\think\Config::set()设置
仅对当前请求有效,不写入文件,优先级最高,但不可持久化。
⚠️ 注意:
.env文件在 TP5.0 中不被框架原生支持,需手动引入类库(如vlucas/phpdotenv)并提前加载,否则不会参与上述链条。runtime/config.php是运行时缓存配置,由config:write命令生成,仅在开启配置缓存时生效,它本身不是原始配置源,而是最终合并结果的快照。- 所有配置读取统一走
config()函数或\think\Config::get(),返回的是已合并覆盖后的最终值。
这个优先级结构让你能分层管理配置:基础设在 convention.php,项目通用设在 config.php,环境差异放 {APP_STATUS}.php,模块特有逻辑放模块 config.php,临时调整用动态配置。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











