tlmcclatchey/registry
Composer 安装命令:
composer require tlmcclatchey/registry
包简介
A tiny, DI-friendly in-memory registry with per-key locks and a global freeze switch.
README 文档
README
A tiny, dependency-injection-friendly in-memory registry with per-key locks and a global freeze switch.
Designed as a safer alternative to ad-hoc globals for configuration, runtime state, and bootstrapping data in PHP applications.
Features
- Simple in-memory key/value storage
- Per-key lock flags to prevent specific mutations
- Global freeze to make the registry fully read-only after boot
- Clean interface for DI containers and frameworks
- Zero dependencies, tiny footprint
Installation
composer require tlmcclatchey/registry
Requires PHP 8.4+.
Quick Start
use TLMcClatchey\Registry\MemoryRegistry; $registry = new MemoryRegistry(); // define keys $registry->define('config', array: true); $registry->assign('config', 'env', 'prod'); // set scalar value $registry->set('debug', false); // freeze registry after boot $registry->freeze(); // reads still work $env = $registry->get('config')['env'];
After calling freeze(), all mutation operations throw.
Core Concepts
1. Keys
A key may contain:
- scalar value (
int|string|bool|float|null) - array value (for map/list-style storage)
$registry->set('version', '1.0.0'); $registry->define('services', array: true);
2. Assigning Array Values
$registry->assign('services', 'cache', 'redis'); $registry->assign('services', 'queue', 'sqs');
Check existence:
$registry->isAssigned('services', 'cache'); // true
3. Lock Flags
Each key can prevent specific mutations.
| Flag | Prevents |
|---|---|
NO_SET |
overwriting the whole value |
NO_APPEND |
appending to arrays |
NO_PREPEND |
prepending to arrays |
NO_ASSIGN |
assigning subkeys |
NO_UNASSIGN |
removing subkeys |
NO_CLEAR |
removing the key entirely |
Convenience presets:
RegistryLocks::READONLY RegistryLocks::READ_MODIFY
Example:
use TLMcClatchey\Registry\RegistryLocks; $registry->define('config', lock: RegistryLocks::READONLY, array: true); // any mutation now throws RegistryException
4. Global Freeze
Freeze the entire registry once bootstrapping is complete:
$registry->freeze();
After freezing:
- All mutation methods throw
RegistryException - Read operations continue working
Perfect for:
- application boot phases
- compiled container configs
- immutable runtime state
API Overview
Read
$registry->get(string $key, mixed $default = null); $registry->has(string $key); $registry->all(); $registry->keys();
Write
$registry->define(string $key, int $lock = 0, bool $array = false); $registry->set(string $key, mixed $value, int $lock = 0); $registry->clear(string $key);
Array Operations
$registry->assign(string $key, string $subkey, scalar|null $value); $registry->unassign(string $key, string $subkey); $registry->prepend(string $key, scalar|null $value); $registry->append(string $key, scalar|null $value);
Lifecycle
$registry->freeze(); $registry->isFrozen();
When to Use This
Good fit:
- boot configuration storage
- DI container build phase
- runtime feature flags
- small framework kernels
- CLI app state
Not intended for:
- persistence
- cross-request storage
- caching layers
- large datasets
Philosophy
This library exists for one reason:
Sometimes you do need global state. You just don’t need chaos.
So instead of banning globals, this gives you:
- rules
- immutability after boot
- predictable failure
Like a registry… but with adult supervision.
License
See the LICENSE.md file for full details.
tlmcclatchey/registry 适用场景与选型建议
tlmcclatchey/registry 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 0 次下载、GitHub Stars 达 1, 最近一次更新时间为 2026 年 02 月 15 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 tlmcclatchey/registry 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 tlmcclatchey/registry 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 38
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-02-15