time2split/time2help

time2split项目间共享的实用工具

v1.0.0-alpha 2024-04-08 02:02 UTC

This package is auto-updated.

Last update: 2024-09-08 03:13:08 UTC


README

License: MIT Latest Stable Version Latest Unstable Version

Time2Help 是一个最初为了在 Time2Split 的所有项目中共享而制作的实用库。然而,其功能也可以在任何 PHP 项目中使用。

安装

该库以 Composer 项目形式发布。

$ composer require time2split/time2help

文档

功能

该库服务于 3 个主要领域

  1. 容器
  2. 输入/输出 (IO)
  3. 测试

容器

容器领域提供在多种容器类型上工作的功能。其目的是

  1. 通过迭代每个容器条目(键 => 值)来简化操作,并提供有用的数据结构的实现。
  2. 实现。

在可迭代对象上迭代以对每个项执行某些操作似乎是一个常见的编程任务。该库提供在 数组 和更一般地,在 可迭代对象(它们的优势在于能够高效地工作于 生成器)上工作的功能。

例如,迭代函数可以是:以倒序迭代,仅迭代键,筛选要迭代的条目,对容器的每个条目应用操作,交换条目的键和值;以及任何提供的函数的组合。(如果对了解所有现有函数感兴趣,请参阅 API 文档。)

容器函数主要返回 \Iterator 实例,这些实例在内部更具体地是 \Generator。生成器具有空间效率高的优势:它们只需通过迭代返回一个条目,而无需存储要返回的所有条目。所有容器上的迭代操作都返回迭代器。此外,使用 \iterator_to_array() 从可迭代对象中获取数组非常容易,以至于该库没有兴趣返回更不占空间的数组值。

关于容器领域的第二个目的,该库为 SetOptional 数据结构以及 列表(具有整数键的数组)上的更基本的功能提供了实现。

IO

IO 领域提供 3 个实用类。

  • CharPredicates 用于创建字符谓词闭包的函数。
  • IO 用于输入/输出的函数。
  • Streams 用于流资源的函数。

流和字符谓词主要是为了简化解析器的编写。CharPredicate 允许生成字符谓词闭包。Streams 提供了用于在 PHP 资源流上读取的函数。

IO 提供了与文件系统和 PHP 输出缓冲区交互的函数,还提供了一些启动外部 CLI 命令并获取输出和错误的功能。

测试

测试域被创建,以方便使用 PHPUnit 编写单元测试。它提供了 2 个类:

  1. 生产者
  2. 提供者

使用案例是:

  1. 编写一个包含提供者的可迭代对象,它可以被视为发送到单元测试方法的参数的不完整数据库。
  2. 通过多个提供者数据库之间的空间高效笛卡尔积,创建一个完整的可迭代数据集,以返回 DataProvider

这种工作流程的优点是,它易于理解要编写的不同数据库以及如何组合它们。笛卡尔积会自动生成 PHPUnit 数据集的名称和参数,并且能够在笛卡尔积选择特定的数据库参数时动态生成数据。笛卡尔积的实现内部使用生成器。该生成器不会将所有笛卡尔积存储在容器中,而是仅在测试方法需要时生成每个数据集。