volcanus/configuration
Composer 安装命令:
composer require volcanus/configuration
包简介
Array class for configurations
README 文档
README
使い方
<?php use Volcanus\Configuration\Configuration; assert_options(ASSERT_ACTIVE, 1); assert_options(ASSERT_WARNING, 0); assert_options(ASSERT_CALLBACK, function ($file, $line) { echo '<pre>' . htmlspecialchars(sprintf("Assertion Failed: at %s[%d]\n", $file, $line)) . '</pre>'; }); $config = new Configuration(); echo '<p>define()メソッドで項目を定義</p>'; $config->define('foo'); assert($config->foo === null); try { $config->bar = true; } catch (\InvalidArgumentException $e) { echo '<p>定義されていない項目へのアクセスは InvalidArgumentException</p>'; } echo '<p>define()メソッドでは項目の初期値も定義できる</p>'; $config->define('bar', true); assert($config->bar); echo '<p>定義された項目は値を変更できる</p>'; $config->bar = false; assert($config->bar === false); try { $config->define('bar', false); } catch (\InvalidArgumentException $e) { echo '<p>同名の項目は再定義できない</p>'; } echo '<p>コンストラクタで定義できる</p>'; $config = new Configuration([ 'foo' => null, 'bar' => true, ]); assert($config->foo === null); echo '<p>プロパティアクセス、配列アクセスのどちらも実装済み</p>'; $config = new Configuration([ 'foo' => false, 'bar' => true, ]); $config['foo'] = true; $config->bar = false; assert($config['foo'] === $config->foo); assert($config['bar'] === $config->bar); echo '<p>クロージャを値にして設定値を動的に※オプション</p>'; $config = new Configuration([ 'foo' => 0, 'bar' => function($config) { return $config['foo'] * 2; }, ], Configuration::EXECUTE_CALLABLE); assert($config['bar'] === 0); $config['foo'] = 1; assert($config['bar'] === 2); $config['foo'] = 5; assert($config['bar'] === 10); echo '<p>Traversable(IteratorAggregate), Countableも実装済み</p>'; $config = new Configuration([ 'foo' => false, 'bar' => true, ]); foreach ($config as $name => $value) { switch ($name) { case 'foo': assert($value === false); break; case 'bar': assert($value === true); break; } } assert(count($config) === 2); echo '<p>再帰的に配列アクセス・プロパティアクセス</p>'; $config = new Configuration([ 'array' => ['a' => 'A', 'b' => 'B', 'c' => 'C'], 'object' => new \ArrayObject([ 'a' => new \ArrayObject([ 'a' => ['a' => 'A', 'b' => 'B', 'c' => ['a' => 'A', 'b' => 'B', 'c'=> 'C']], ]), ]), ]); assert('A' === $config['array']['a']); assert('B' === $config['array']['b']); assert('C' === $config['array']['c']); assert('A' === $config['object']['a']['a']['a']); assert('B' === $config['object']['a']['a']['b']); assert('A' === $config['object']['a']['a']['c']['a']); assert('B' === $config['object']['a']['a']['c']['b']); assert('C' === $config['object']['a']['a']['c']['c']); assert('A' === $config->array->a); assert('B' === $config->array->b); assert('C' === $config->array->c); assert('A' === $config->object->a->a->a); assert('B' === $config->object->a->a->b); assert('A' === $config->object->a->a->c->a); assert('B' === $config->object->a->a->c->b); assert('C' === $config->object->a->a->c->c); echo '<p>実体はオブジェクトなので、純粋な配列への変換はtoArray()メソッドで</p>'; $array = $config->toArray(); assert('A' === $config['array']['a']); assert('B' === $config['array']['b']); assert('C' === $config['array']['c']); assert('A' === $config['object']['a']['a']['a']); assert('B' === $config['object']['a']['a']['b']); assert('A' === $config['object']['a']['a']['c']['a']); assert('B' === $config['object']['a']['a']['c']['b']); assert('C' === $config['object']['a']['a']['c']['c']); assert(is_array($array)); assert(is_array($array['array'])); assert(is_array($array['object'])); assert(is_array($array['object']['a'])); echo '<p>JSON文字列から生成</p>'; $config = Configuration::createFromJson(<<<'JSON' { "foo": true, "bar": false, "arr": ["A", "B", "C"], "dict": { "a": "A", "b": "B", "c": "C" } } JSON ); assert($config['foo'] === true); assert($config['bar'] === false); assert('A' === $config['arr'][0]); assert('B' === $config['arr'][1]); assert('C' === $config['arr'][2]); assert('A' === $config['dict']['a']); assert('B' === $config['dict']['b']); assert('C' === $config['dict']['c']); echo '<p>offsetExists() の実装による未定義キーへの isset()</p>'; $config = new Configuration([ 'foo' => false, 'bar' => null, ]); assert(true === isset($config['foo'])); assert(false === isset($config['bar'])); assert(false === isset($config['baz'])); echo '<p>__isset() の実装による未定義プロパティへの isset()</p>'; $config = new Configuration([ 'foo' => false, 'bar' => null, ]); assert(true === isset($config->foo)); assert(false === isset($config->bar)); assert(false === isset($config->baz)); echo '<p>offsetUnset() の実装による配列アクセスでの unset()</p>'; $config = new Configuration([ 'foo' => false, ]); assert(true === isset($config['foo'])); unset($config['foo']); assert(false === isset($config['foo'])); echo '<p>__unset() の実装によるプロパティアクセスでの unset()</p>'; $config = new Configuration([ 'foo' => false, ]); assert(true === isset($config->foo)); unset($config->foo); assert(false === isset($config->foo));
対応環境
- PHP 8.1以降
volcanus/configuration 适用场景与选型建议
volcanus/configuration 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 400 次下载、GitHub Stars 达 0, 最近一次更新时间为 2013 年 01 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 volcanus/configuration 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 volcanus/configuration 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 400
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 9
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2013-01-21