php-slang/php-slang

PHPSlang 是一个库,允许你在 PHP 中编写纯函数式代码

v0.1.4 2017-02-07 09:50 UTC

This package is auto-updated.

Last update: 2024-09-18 23:56:48 UTC


README

Packagist PHP from Packagist Build Status Scrutinizer Code Quality Code Coverage Build Status Packagist

PhpSlang

PhpSlang 将帮助你使用 PHP 编写纯函数式代码。

PhpSlang 是一个 PHP 库,旨在填补 PHP 和经典函数式语言之间的差距。它提供优化你的工作的构造,并让你以纯函数式风格进行开发。

更多信息

官方页面

文档

Twitter

路线图

特性

示例代码

使用 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。

如何贡献

  1. 分支此存储库

  2. 克隆你的分支

git clone git@github.com:php-slang/php-slang.git
  1. 安装依赖项
composer install --dev
  1. 编写一些代码

  2. 验证是否正确

./ci/verify.sh
  1. 推送你的 pull request!

MIT 许可证 (MIT)

版权所有 (c) 2018 Witold Adamus

在此条件下,任何人都可以免费获得此软件及其相关文档副本(“软件”),不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许获得软件的人进行此类处理:以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论是因为合同、侵权或其他方式,由软件本身、使用或与软件相关的其他方式引起的。