thinkphp 5.x 的 config() 函数不支持点号读取二级配置,如 config('database.host') 返回 null;正确方式为 config('database')['host'] 或 config(['database'=>[]])'database',tp6 仅 config::get() 支持点号语法。

ThinkPHP 的 config() 函数默认不支持点号读取二级配置
直接写 config('database.host') 在 ThinkPHP 5.0/5.1 中会返回 null,不是你漏写了配置,而是这个语法根本没被原生支持——官方只允许一级键名(如 'database')全量读取,或用数组路径方式手动提取。
正确读取二级配置的两种可靠方式
推荐优先使用数组路径形式,它兼容所有 TP5.x 版本且语义清晰:
-
config('database')['host']:先全量获取database配置数组,再用 PHP 数组语法取值 -
config(['database' => []])['database']['host']:更安全,避免database未定义时触发 Notice
如果坚持用点号风格,需自行封装一层(TP 官方未提供内置支持):
function config_dot($key) {
$keys = explode('.', $key);
$cfg = config($keys[0]);
foreach (array_slice($keys, 1) as $k) {
if (!is_array($cfg) || !isset($cfg[$k])) return null;
$cfg = $cfg[$k];
}
return $cfg;
}
// 使用:config_dot('database.host')
注意 config() 的参数类型和副作用
传字符串是读取,传数组是写入;传空数组是重置。容易误操作导致运行时配置被覆盖:
-
config('database.host')→ 错误,返回null -
config('database')→ 正确,返回完整数据库配置数组 -
config(['database.host' => '127.0.0.1'])→ 危险!这会把整个config数组替换成一个只有database.host键的一维数组
想动态修改二级项,必须先读出父级,再改子项,最后整组写回:$db = config('database'); $db['host'] = '127.0.0.1'; config('database', $db);
TP6 已支持点号语法,但仅限于 Config 门面类
TP6 中 config() 函数本身仍不支持点号,但 think\Config 类和 Config::get() 支持:
-
\think\Config::get('database.host')✅ 可用 -
config('database.host')❌ 依然无效 - 注意:TP6 默认关闭配置缓存,频繁调用
Config::get()有轻微性能开销
多环境部署时,二级配置常嵌在 env 或 extra 目录里,记得确认实际加载顺序——后加载的配置会覆盖前面的,这点比语法更容易导致读到“错的值”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











