eclipxe/generic-collections

模拟泛型集合的库

v0.3.0 2017-03-22 00:54 UTC

This package is auto-updated.

Last update: 2024-09-09 18:18:34 UTC


README

Source Code Latest Version Software License Build Status Scrutinizer Coverage Status Total Downloads SensioLabsInsight

Generic Collections PHP 库是一个 PHP 5.6+,它模拟了 Java 集合框架

由于 PHP 没有泛型,这个库将始终实现类型检查。别担心,无论如何,您始终可以使用 mixed 类型

对于具体类,使用构造函数方法

// collection = new Collection<Foo>();
$collection = new Collection(Foo::class);

对于您自己的类,可以扩展抽象类并实现适当的方法,例如

class Foos extends Collection
{
    public function __construct(array $elements)
    {
        parent::__construct(Foo::class, $elements);
    }
}

安装

推荐的安装方法是使用 PackagistComposer。运行以下命令安装该软件包并将其添加到项目的 composer.json

composer require eclipxe/generic-collections

类列表

基本类

  • Collection:表示同一类型的元素集合。
  • Set:仅允许唯一元素的集合
  • Queue:用于存储元素的集合(FIFO)
  • Deque:双端队列

实现 \ArrayAccess 的类

  • Map:从键到值的映射。
  • List:可以通过整数索引访问的集合,也可以在列表中搜索元素。

附加类

  • Stack:用于存储元素的集合(LIFO)
  • ShapeTypedStruct:具有类型值的结构(也具有 \ArrayAccess

所有类都有以下附加选项

  • 允许 null 元素/值
  • 只允许唯一元素/值
  • 比较相等(在成员之间进行相等比较而不是相同比较)

关于

这个库受到 Java 集合框架和 PHP ramsey/collection 库的启发。

我看到 ramsey 的包有重大变化,因为我不想对他的 API 进行重大更改,所以我决定创建自己的方法。

我还深入搜索了 Packagist,但找不到一个确保成员类型检查的库。

是的,我的错误,存储库用户名是 eclipxe13/,而 Packagist 名称是 eclipxe/

兼容性

此类将与 PHP 支持的版本 兼容,并支持安全性。这意味着它将提供与 PHP 5.6+ 的兼容性,直到 2018-12-31。

由于 5.5+ 版本将于 2016-06-10 截止,这低于此库的第一个版本发布,因此不包括对该版本的支持。

没有特别努力使此库与 hhvm 兼容,因为 hhvm 包含泛型支持,并且还有一个集合库。我看到了 hack 语言实现特性(如使用抽象方法的能力)的不同之处,这些特性不兼容。此外,我还看到了 hhvm 3.6.6(Travis CI 使用的版本)中 SplDoubleLinkedList 的实现问题,该问题在版本 3.12.1 中不存在。

文档和示例

正在进行中。请耐心等待。

贡献

欢迎贡献力量!请阅读CONTRIBUTING以获取详细信息,并别忘了查看TODOCHANGELOG文件。

版权和许可

eclipxe/generic-collections库的版权©属于Carlos C Soto,并按照MIT许可(MIT)授权使用。请参阅LICENSE获取更多信息。