PHP如何读取返回数组的config.php配置?实现类Laravel config函数
实现类似Laravel的config()函数读取配置
首先,你的核心问题是没正确利用PHP的include/require特性:当PHP文件直接return一个数组时,include该文件会执行文件代码并返回这个数组,完全不需要用file_get_contents(那是读取纯文本内容的方法)。
基础读取方式
直接将include的结果赋值给变量,就能拿到完整的配置数组:
// 建议用绝对路径避免路径问题,比如和当前脚本同目录的情况 $configFile = __DIR__ . '/config.php'; $config = include $configFile; // 直接访问配置项 echo $config['db_name']; echo $config['password'];
封装成类似Laravel的config()函数
要实现支持单键、嵌套键读取,且自动缓存配置避免重复加载文件,代码如下:
function config(string $key = null, $default = null) { // 静态变量缓存配置数组,整个请求周期内只加载一次 static $config = null; if ($config === null) { // 替换为你的config.php绝对路径 $configFile = __DIR__ . '/config.php'; // 加载配置文件并获取返回的数组 $config = include $configFile; } // 不传key时返回整个配置数组 if ($key === null) { return $config; } // 处理点语法,比如通过 'db.host' 读取嵌套数组的值 $keys = explode('.', $key); $value = $config; foreach ($keys as $segment) { if (!isset($value[$segment])) { return $default; } $value = $value[$segment]; } return $value; }
使用示例
// 获取全部配置 $allConfig = config(); // 获取单个配置项 $dbName = config('db_name'); // 读取嵌套配置(假设config.php里有 ['db' => ['host' => '127.0.0.1']]) $dbHost = config('db.host'); // 配置项不存在时返回默认值 $unknownItem = config('unknown.key', 'default_value');
注意事项
- 必须用绝对路径加载配置文件,防止因当前工作目录变化导致文件找不到,用
__DIR__(当前脚本所在目录)拼接路径是最稳妥的方式。 - 如果你的应用有多份配置文件(比如database.php、app.php),可以扩展这个函数,支持传入文件名来加载对应配置。
内容的提问来源于stack exchange,提问作者Stephen Ngari
相关产品推荐
相关产品推荐

