graste/params

数组包装器,简化值检索。具有参数、选项和设置以及用于包含在其他库中的特性。

v3.1.0 2018-11-27 14:44 UTC

This package is auto-updated.

Last update: 2024-09-09 02:50:52 UTC


README

Latest-Stable-Version License Latest Unstable Version Build Status Stories in Ready Total Composer Downloads

目的

数组包装器对象,简化值检索。它提供了一个 get 方法,如果给定的键不存在,则返回默认值。除了作为普通数组的用法以及各种 getsethas 等方法外,参数定义了一个 getValues($expression) 方法,允许通过提供更复杂或更简单的表达式来检索值。您可以使用一个调用轻松从嵌套数组中检索值,或从不同嵌套级别获取多个值。它还提供了用于方便创建可配置类的特性。

需求和安装

  • PHP ^7.0

通过 Composer 安装库

./composer.phar require graste/params [可选版本]

将作为供应商库需求手动添加到项目的 composer.json 文件中同样有效

{
    "require": {
        "graste/params": "^3.0.0"
    }
}

或者,您可以从 发布 下载发行存档。

文档和用法

$data = array(
    'str' => 'some string',
    'first_level' => 'first level',
    'nested' => array(
        'str' => 'some nested string',
        '2nd level' => 'second level',
    ),
    'more' => array(
        'str' => 'other nested string',
    )
);

// base object of the aliased versions:
$arrayobj = new \Params\ConfigurableArrayObject($array);

// create mutable parameters instance:
$params = new \Params\Parameters($data);
// or initialize an immutable instance that prevents further modifications after construction
$params = new \Params\Immutable\ImmutableParameters($data);

// do you like options instead of parameters in your classes?
$params = new \Params\Options($data);
$params = new \Params\Immutable\ImmutableOptions($data);

// do you like settings instead of parameters in your classes?
$params = new \Params\Settings($data);
$params = new \Params\Immutable\ImmutableSettings($data);

// use it as a recursive object:

$params->has("foo")                           // returns true now
$params->get("str")                           // gives "some string"
$params->get("nested")                        // gives array stored under "nested" key
$params->get("nested")->get('str')            // gives "some nested string"
$params->get("non-existant", "default value") // gives "default value" as given key is non existant
$params->get("nested")->set("foo", "bar")     // sets key "foo" to value "bar" on the "nested" array
$params->getKeys()                            // returns all first level keys
$params->toArray()                            // returns internal array

// or use the mutable methods
$params->set("foo", "bar")                    // sets key "foo" to value "bar"
$params->add(array|ArrayAccess)               // add array or other ArrayAccess implementing object to current instance
$params->clear()                              // empty internal array
$params->map(function($key, $value) { … })    // modifies each value to the value returned by the callback

// retrieve values using expressions

$params->getValues("foo")                               // gives "bar"
$params->getValues("nested.str")                        // gives "some nested string"
$params->getValues('*.str')                             // gives array("some nested string", "other nested string")
$params->getValues('[str, nested.str]')                 // gives array("some string", "some nested string")
$params->getValues('nested."2nd level" || first_level') // gives "second level" as that key exists; other expression not evaluated
$params->getValues('first_level || nested."2nd level"') // gives "first level" as that key exists; other expression not evaluated

// use it as an array:

$params["str"]    // gives "some string"
$params["nested"] // gives the array under the "nested" key
$params[1]        // gives "first level"

// use it as an object with properties

$params->foo = 'bar'          // sets key 'foo' to value 'bar'
$params->filter->bool = 'yes' // sets $params['filter']['bool'] to value 'yes'

使用的表达式语法由 Michael Dowling 的 JMESPath 提供。

特性

可以使用 特性 为自己的可配置类创建

  • ImmutableParametersTrait 包装 parameters
  • ParametersTrait 包装 parameters
  • ImmutableOptionsTrait 包装 options
  • OptionsTrait 包装 options
  • ImmutableSettingsTrait 包装 settings
  • SettingsTrait 包装 settings

为了支持流畅的 API,方法 addsetremoveclear 返回它们混合到的类实例。

ElasticSearch 查询

Parameters 提供的语法糖不仅方便定义可配置类,而且简化了 ElasticSearch 查询的创建和修改。

$params->filter->bool->must[1]->term->live = false;
$params->get('filter')->set('bool', …);
$params->filter->bool->must[] = array(…);

贡献

请通过 分叉 并发送一个 pull request 来贡献。更多信息可以在 CONTRIBUTING.md 文件中找到。

要在该存储库上进行开发,克隆您的分叉并使用 Makefile 目标

  • make install 安装 composer 和所有必要的供应商库
  • make tests 运行 phpunit 测试
  • make code-sniffer-cli 在控制台运行代码审查器

代码尝试遵循以下 PHP-FIG 标准: PSR-4PSR-1PSR-2。当前许可证为 MIT

作者和贡献者列在该存储库的 github 贡献者图表 中。许可证文件必须保持完整,以便于归因和共享这项工作。

变更日志

查看更多关于更改的信息,请参阅CHANGELOG.md