fiberphp / config
⚙️ FiberPHP 配置仓库与 .env 加载 —— 点号键只读配置、目录递归合并、.env 级联加载的零依赖纯库。
dev-master
2026-09-30 10:39 UTC
Requires
- php: >=8.3
- ext-json: *
Requires (Dev)
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-30 13:07:10 UTC
README
配置静态仓库与 .env 环境变量加载,零依赖纯库,可在任意 PHP 项目中独立使用。
- 常驻内存的只读配置仓库,点号键访问(
Config::get('app.debug')) - 配置目录递归扫描,按目录层级合并为嵌套数组
- 包默认配置 → 应用配置 → 环境配置三级合并
.env四级级联加载,自动探测APP_ENV
环境要求
- PHP >= 8.3,扩展 ext-json
安装
composer require fiberphp/config
配置仓库
配置文件返回数组:
// config/app.php
return [
'name' => 'demo',
'debug' => true,
];
进程启动时加载一次:
use FiberPHP\Config;
// 加载 config/ 与 config/{env}/ 目录;$defaults 为包默认配置
Config::load('/path/to/app', 'production', $defaults);
// 空 basePath 时仅合并包默认配置(嵌入式使用)
Config::load('', 'production', ['redis' => ['host' => '127.0.0.1']]);
读取配置:
Config::get('app.name'); // 'demo'
Config::get('app.missing', 'def'); // 未命中返回默认值
Config::get(); // 全部配置
Config::has('app.debug'); // 是否存在(显式 null 也算存在)
也可以只加载一个目录:
Config::loadFromDir('/path/to/config');
保留目录
load() / loadFromDir() 的最后一个参数 $reservedDirs 声明不作为顶层配置键加载的目录名(供调用方自行扫描这些目录):
Config::load($basePath, 'production', $defaults, [], ['process', 'command', 'routes']);
默认不保留任何目录。
目录层级约定
config/app.php→Config::get('app.*')config/redis/cache.php→Config::get('redis.cache.*')- 嵌套目录逐层映射:
config/queue/app.php→Config::get('queue.app.*') - 环境目录覆盖:
config/{env}/app.php直接覆盖config/app.php的同名键,不会被当作{env}.app.*顶层键加载
.env 加载
use FiberPHP\Env;
// 级联加载:.env → .env.local → .env.{env} → .env.{env}.local(后者覆盖前者)
Env::loadCascade('/path/to/app', 'production');
// $env 省略时按真实环境变量、再按 .env 内 APP_ENV 自动探测
Env::loadCascade('/path/to/app');
Env::get('APP_ENV', 'production');
读取顺序:已加载数据 → 常量 → $_ENV → $_SERVER → getenv()。
类型转换(读取时生效,不改变真实环境变量):
true/false(不区分大小写,也支持(true)写法)转为布尔;null/(null)视为未设置并回落默认值;empty转为空字符串- 数字仅在默认值为 int/float 时转型:
Env::get('PORT', 8080)得到 int;默认值省略或为字符串时保持字符串;值不是合法数字时回落默认值 - 布尔默认值下,
1/0转为true/false - 值用成对引号包裹时原样返回、不做转换:
FLAG="false"得到字符串"false" - 行尾
#注释只在引号外生效(须前置空白),引号内的#原样保留:DSN="mysql:3306/#shard"
许可证
MIT © FiberPHP Contributors