本文目录导读:

- 使用 PHP 数组文件(最基础、简单)
- 使用 .env 文件(环境变量方式,推荐中小项目)
- 使用 YAML / JSON / XML 配置文件(适合复杂配置)
- 使用配置类/服务容器(适合中大型项目)
- 使用框架自带的配置系统(推荐)
- 数据库/远程配置(适合需要动态修改的场景)
在PHP项目中实现配置管理,常见且推荐的方式有以下几种,可根据项目规模和复杂度选择:
使用 PHP 数组文件(最基础、简单)
适合小型项目或快速原型。
创建配置文件 config/app.php:
<?php
return [
'db' => [
'host' => 'localhost',
'name' => 'test_db',
'user' => 'root',
'pass' => 'secret',
],
'app' => [
'debug' => true,
'url' => 'http://localhost',
],
];
使用配置:
$config = require 'config/app.php'; echo $config['db']['host']; // localhost
优点:零依赖,速度快
缺点:不支持热更新、不易于多环境管理
使用 .env 文件(环境变量方式,推荐中小项目)
通过 vlucas/phpdotenv 或 Symfony Dotenv 读取 .env 文件,适合区分开发/生产环境。
安装:
composer require vlucas/phpdotenv
创建 .env 文件:
APP_DEBUG=true DB_HOST=localhost DB_NAME=test DB_USER=root DB_PASS=secret
加载与使用:
use Dotenv\Dotenv;
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
echo $_ENV['DB_HOST']; // 或 getenv('DB_HOST')
优点:
- 环境分离(开发、测试、生产)
- 不提交
.env到版本控制(安全性好) - 被各大框架(Laravel、Symfony)采纳
缺点:需要额外依赖(可接受)
使用 YAML / JSON / XML 配置文件(适合复杂配置)
适用于需要层次化、人类可读性强的配置(如 YAML),常配合 Symfony Yaml 组件。
示例 YAML 文件 config.yaml:
database: host: localhost name: test user: root pass: secret
解析:
use Symfony\Component\Yaml\Yaml;
$config = Yaml::parseFile('config.yaml');
echo $config['database']['host'];
优点:可读性好,支持注释,适合复杂结构
缺点:需要解析库,性能略逊于纯 PHP 数组
使用配置类/服务容器(适合中大型项目)
通过面向对象方式封装配置,支持依赖注入。
定义配置类:
class Config
{
private array $items;
public function __construct(array $items)
{
$this->items = $items;
}
public function get(string $key, $default = null)
{
$keys = explode('.', $key);
$value = $this->items;
foreach ($keys as $segment) {
if (!isset($value[$segment])) {
return $default;
}
$value = $value[$segment];
}
return $value;
}
}
// 使用
$config = new Config(require 'config/app.php');
echo $config->get('db.host'); // localhost
结合容器(如 PHP-DI, Pimple):将 Config 注册为单例,全局注入。
使用框架自带的配置系统(推荐)
如果使用现代框架(Laravel、Symfony、Yii、ThinkPHP 等),强烈建议直接使用框架内置的配置管理:
- Laravel:
.env+config/*.php,通过config('app.debug')访问 - Symfony:
.env+ YAML/XML/PHP 文件,通过ParameterBag访问 - Yii2:
config/main.php,通过Yii::$app->params['key']访问
优点:成熟、安全、支持缓存、环境自动识别、无需重复造轮子
数据库/远程配置(适合需要动态修改的场景)
配置存储在数据库或 Redis 中,通过后台管理界面修改。
优点:支持运行时动态修改,无需重启服务
缺点:性能较低(通常加缓存),配置管理需额外代码
| 项目规模 | 推荐方案 |
|---|---|
| 小型 / 学习 | PHP 数组 或 .env |
| 中小型 / 团队 | .env + 配置类 |
| 中大型 / 商业项目 | 使用框架内置配置 + .env |
| 需要热更新 / SaaS | 数据库 + 缓存(Redis) |
| 需要多语言/扩展 | YAML 搭配配置类 |
核心原则:
- 敏感信息(密码、API Key)永远不硬编码,使用
.env或环境变量 - 配置文件不要提交到版本库(除默认模板)
- 配置尽量中心化,避免分散在代码各处
- 为配置提供默认值,避免运行时错误