xcgpseud / hasphp
PHP 的 Haskell 风格列表实现
v1.0.0
2020-01-05 18:14 UTC
Requires
- fzaninotto/faker: ^1.9
- myclabs/php-enum: ^1.7
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2024-09-07 21:14:54 UTC
README
具有功能功能的严格类型迭代列表。
这个库背后的主要有两个想法。
-
为 PHP 中数组元素的类型提供指定方式,并强制遵守此规定。
-
为 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);
如 map 和 filter 等函数返回 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 - 确保添加
@mixinPHPDoc 注释,提示它是 IterList 的 mixin - 在每个有效类型上
use这个 Trait,查看src/Types/Ints.php并复制,如有疑问。 - 在
tests/Functions中添加测试 - 如果可能,使用 TestBuilder 使用现有测试的布局进行复制。 - 遵循 PHP7.4(箭头函数等),因为我希望尽可能使用最新版本!
- 将您的分支推送到您分支的仓库中,然后创建一个 Pull Request 到我的仓库。
- 一旦测试通过,它将被审查 :)
目前 HasPHP 没有文档,但请保持关注,因为我计划很快添加。 这将改变贡献指南。