xcgpseud/hasphp

PHP 的 Haskell 风格列表实现

v1.0.0 2020-01-05 18:14 UTC

This package is auto-updated.

Last update: 2024-09-07 21:14:54 UTC


README

具有功能功能的严格类型迭代列表。

这个库背后的主要有两个想法。

  1. 为 PHP 中数组元素的类型提供指定方式,并强制遵守此规定。

  2. 为 PHP 中的可迭代类型提供一系列功能实现。

HasPHP 将这些结合在一起。

安装

安装 composer 后,在您的项目中输入

composer require xcgpseud/hasphp

用法

HasPhp 将确保初始数组中的任何项与指定的类型相同。当使用对象时,它将确保它们都与数组中的第一个对象类型相同。

以下是一些用法示例

要获取 0 到 200 之间所有奇数的乘积并获取这些数的和

\HasPhp\Types\Ints::with(range(0, 200))
    ->filter(fn (int $i): bool => $i % 2 != 0)
    ->map(fn (int $i): int => $i * 2)
    ->sum();

要获取所有 18 岁以上的人

\HasPhp\Types\Objects::with($peopleArray)
    ->filter(fn (Person $x): bool => $x->getAge() > 18);

mapfilter 等函数返回 IterList,因此您可以在其末尾链式调用更多函数。要获取数组,请使用 ->get()

所有函数

签名顺序与列表中的数组 -> 参数 -> 返回值与 Haskell 的顺序相反。

例如,Haskell 的 filter 是 (a -> bool) -> [a] -> [a],因为它被这样调用:filter (even) [5, 1, 2, 7],而 Hasphp 的则是 [a] -> (a -> bool) -> [a],因为我们先定义了列表。

贡献

  • 分支仓库
  • 克隆您的仓库
  • 运行 composer install 以安装所需的 composer 包
  • src/Functions 文件夹中添加函数作为 Trait
  • 确保添加 @mixin PHPDoc 注释,提示它是 IterList 的 mixin
  • 在每个有效类型上 use 这个 Trait,查看 src/Types/Ints.php 并复制,如有疑问。
  • tests/Functions 中添加测试 - 如果可能,使用 TestBuilder 使用现有测试的布局进行复制。
  • 遵循 PHP7.4(箭头函数等),因为我希望尽可能使用最新版本!
  • 将您的分支推送到您分支的仓库中,然后创建一个 Pull Request 到我的仓库。
  • 一旦测试通过,它将被审查 :)

目前 HasPHP 没有文档,但请保持关注,因为我计划很快添加。 这将改变贡献指南。