php-slang / php-slang
PHPSlang 是一个库,允许你在 PHP 中编写纯函数式代码
v0.1.4
2017-02-07 09:50 UTC
Requires
- php: ~7.0
Requires (Dev)
- humbug/humbug: ~1.0@dev
- phpunit/phpunit: ~5.5
README
PhpSlang 将帮助你使用 PHP 编写纯函数式代码。
PhpSlang 是一个 PHP 库,旨在填补 PHP 和经典函数式语言之间的差距。它提供优化你的工作的构造,并让你以纯函数式风格进行开发。
更多信息
特性
- 选项 monad
- Either monad
- Copy 特性
- 不可变列表集合
- Trampolines
- 模式匹配
- 记忆化
- 不可变 HashMap 集合
- 不可变 Set 集合
- 提取器
- Try monad
- Future monad
- 并行不可变列表集合
- 并行不可变 HashMap 集合
- 并行不可变 Set 集合
- 可遍历集合
- 无限精度的数值类型
- Chainable\pipe monad
- 方便的枚举
示例代码
使用 PhpSlang,你的代码将看起来像这样
public function nonTrivialExampleFn(ParallelListCollection $mysteriousInput): float { return $mysteriousInput ->filter(function ($elem) { return $elem > 10; }) ->partition( function ($elem) { return $elem <=> 20; }, new Set([-1, 0, 1]) ) ->map(function (ListCollection $bucket) { return $bucket->max()->getOrElse(0.0); }) ->avg() ->getOrElse(0.0); }
或者这样
public function actionUpdateBook(string $bookId, Request $request): Response { return $this ->bookUpdaterService ->updateBook($bookId, $this->bookRequestTransformer->toInput($request), $this->getUser()) ->left(function(BookUpdateError $error) { return Match::val($error)->of( new TypeOf(BookNotFound::class, new Response(null, Response::HTTP_NOT_FOUND)), new TypeOf(InvalidInput::class, new Response(null, Response::HTTP_BAD_REQUEST)), new TypeOf(NotAuthorized::class, new Response(null, Response::HTTP_UNAUTHORIZED)) ); }) ->right(function(BookInfo $bookInfo) { return new Response($this->bookInfoTransformer->toJson($bookInfo), Response::HTTP_OK); }) ->get(); }
想看更多示例? 查看文档。
贡献
TL;DR;
请随意在 GitHub 上发布你的 pull request。
如何贡献
-
分支此存储库
-
克隆你的分支
git clone git@github.com:php-slang/php-slang.git
- 安装依赖项
composer install --dev
-
编写一些代码
-
验证是否正确
./ci/verify.sh
- 推送你的 pull request!
MIT 许可证 (MIT)
版权所有 (c) 2018 Witold Adamus
在此条件下,任何人都可以免费获得此软件及其相关文档副本(“软件”),不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许获得软件的人进行此类处理:以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论是因为合同、侵权或其他方式,由软件本身、使用或与软件相关的其他方式引起的。