stratadox/immutable-collection
Composer 安装命令:
composer require stratadox/immutable-collection
包简介
README 文档
README
Immutable implementation of the Collection interface.
Provides an abstract ImmutableCollection class, which extends (and restricts) the SplFixedArray class, as well as several traits with behavioural logic for (derived) immutable collection classes.
Why use this
Regular php "arrays" are not really arrays at all, but sorted hash maps. They are not objects, they are not thread safe and they cannot guard their own invariants.
Although sorted hash maps are a versatile data structure that can be used in many different scenarios, they aren't always good data structures for the situation.
When dealing with a collection of objects, for instance, you probably want dedicated collection objects, on which you can call methods.
Many frameworks provide some sort of collection class. They rarely provide immutability, though, and are therefore not thread safe. Additionally, they are usually implementing a bloated interface with all of the methods you might some day need - but probably won't.
Due to the many optional expansions which can be applied at will, this package enables powerful typesafe collections that can be fine-tunes for use in any project, without getting distracted by a bloated collection interface.
The immutability of the collection means they can be used in projects that care about reducing state changes.
Installation
Install using composer:
composer require stratadox/immutable-collection
Basic usage
The most basic implementation of the immutable collection might look something like the following:
<?php class Numbers extends ImmutableCollection { public function __construct(int ...$items) { parent::__construct(...$items); } }
Or:
<?php class Things extends ImmutableCollection { public function __construct(Thing ...$things) { parent::__construct(...$things); } }
Advanced usage
Additional behaviour can be added by implementing the relevant interfaces and/or traits for the particular concrete collection:
<?php class Numbers extends ImmutableCollection implements Appendable { use Appending; public function __construct(int ...$items) { parent::__construct(...$items); } } $numbers = new Numbers(1, 2, 3); $numbers = $numbers->add(4); assert($numbers == new Numbers(1, 2, 3, 4));
Multiple kinds of behaviour can be used simultaneously:
<?php class Numbers extends ImmutableCollection implements Mergeable, Purgeable { use Merging, Purging; public function __construct(int ...$items) { parent::__construct(...$items); } } $numbers = new Numbers(1, 2, 3); $numbers = $numbers->merge(new Numbers(4, 5, 6)); $numbers = $numbers->remove(3); assert($numbers == new Numbers(1, 2, 4, 5, 6));
The shorthand for which is:
<?php $numbers = (new Numbers(1, 2, 3)) ->merge(new Numbers(4, 5, 6)) ->remove(3); assert($numbers == new Numbers(1, 2, 4, 5, 6));
If desired, the methods current and offsetGet may be implemented with a
return type hint, in order to (further) increase type safety and to allow
IDE's like PhpStorm to provide code completion in loops and array-like access:
<?php class Things extends ImmutableCollection { public function __construct(Thing ...$things) { parent::__construct(...$things); } public function current(): Thing { return parent::current(); } public function offsetGet($index): Thing { return parent::offsetGet($index); } }
stratadox/immutable-collection 适用场景与选型建议
stratadox/immutable-collection 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.85k 次下载、GitHub Stars 达 5, 最近一次更新时间为 2017 年 11 月 11 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 stratadox/immutable-collection 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 stratadox/immutable-collection 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 1.85k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 5
- 点击次数: 0
- 依赖项目数: 10
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-11-11