ama-team/tree-access

类似Symfony-Property-Access的树操作助手

0.1.1 2018-01-11 12:30 UTC

This package is not auto-updated.

Last update: 2024-09-14 03:18:45 UTC


README

Packagist CircleCI/master Coveralls/master Scrutinizer/master

这个小巧的项目允许读取、枚举和写入由数组和对象组成的嵌套树中的属性/元素。

它与symfony/property-access非常相似,但有两点区别

  • 这个库以相同的方式处理数组元素和对象属性,提供统一的树访问。这可能既可取也可能不可取,具体取决于实际应用,因此属性访问可能对你更有用。
  • 这个库允许枚举特定节点的属性。

安装

composer require ama-team/tree-access

用法

<?php

$object = new stdClass();
$object->values = ['apples' => 'green'];
$root = [$object];

$accessor = AmaTeam\TreeAccess\TreeAccess::createAccessor();

// 'green'
$color = $accessor->read($root, '0.values.apples');
// List of AmaTeam\TreeAccess\API\NodeInterface
$values = $accessor->enumerate($root, '0.values');
// NodeInterface that got updated
$accessor->write($root, '0.values.melon', 'yellow');
// false
$accessor->exists($root, '0.values.watermelon');

设置器/获取器支持已经内置,访问缺失的节点将抛出异常(除设置现有节点的叶子节点外)。

ActiveNode

访问器已提供额外的方法,允许替代的操纵接口

<?php

$object = new stdClass();
$object->values = ['apples' => 'green'];
$root = [$object];

$accessor = AmaTeam\TreeAccess\TreeAccess::createAccessor();

$activeNode = $accessor->wrap($object);
foreach ($activeNode->enumerate() as $child) {
    $child->getChild('values')->setChild('lemon', 'yellow');
    $child->setChild('processed', true);
}

性能

截至0.1.x版本,为了使用方便,可能牺牲了一些性能优化。这个库(至少目前)完全不提倡性能。

贡献

请随意向 dev 分支发送PR

Dev分支状态

CircleCI/dev Coveralls/dev Scrutinizer/dev

许可

MIT许可 / AMA Team, 2018