Search by

fiberphp / config

fiberphp

⚙️ FiberPHP 配置仓库与 .env 加载 —— 点号键只读配置、目录递归合并、.env 级联加载的零依赖纯库。

Package info

gitee.com/fiberphp/config.git

Issues

pkg:composer/fiberphp/config

Statistics

Installs: 1

Dependents: 3

Suggesters: 2

dev-master 2026-09-30 10:39 UTC

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