marcosh/effector

此包已被弃用,不再维护。未建议替代包。

0.0.1 2017-04-25 16:24 UTC

This package is auto-updated.

Last update: 2021-11-16 15:30:29 UTC


README

Build Status Latest Stable Version Code Climate Coverage Status Code Quality Scrutinizer Code Quality

一个用于编写感知效果的 PHP 库。

在这个库中,你可以找到一个代表单个(副作用)效果的类集合。这允许你编写完全功能性的代码,将效果作为数据处理,并将它们的执行委托给应用程序的另一个组件。

关于这种方法的更多想法,您可以在这里找到详细信息 这里

安装

使用 Composer 命令将此库添加到依赖项

composer require marcosh/effector

使用方法

src/Effect 文件夹中包含的每个类代表一个单个(副作用)。例如 Marcosh\Effector\Effect\Echo_ 代表输出字符串的操作,或者 Marcosh\Effector\Effect|FileGetContents 代表读取文件的操作。

你可以简单地创建一个效果的新实例

$effect = new Echo_();

请注意,此时实际上没有任何事情发生(除了创建类的新的实例)。

要实际执行由该类描述的效果,你需要调用它

$effect('hello!');

这将实际执行效果并输出作为参数传递的字符串。

组合效果

将效果表示为数据是有用的,因为你可以将它们作为输入参数或函数的返回值传递。然而,如果没有从简单效果创建更复杂效果的能力,它们可能会相当有限。

幸运的是,组合效果相当简单。为此,你可以使用 Marcosh\Effector\Compose 类。这将接收几个效果和逻辑片段,并将它们组合成一个单一复杂的效果。

例如,如果你有一个接收 HTTP 请求的效果和一个发出 HTTP 响应的效果,你可以将它们组合起来创建一个 Web 应用程序。可以这样做:

$websiteLogic = function (RequestInterface $request): ResponseInterface { ... }

$app = Compose::pieces(
    new ReceiveRequest(),
    $websiteLogic,
    new EmitResponse()
);

当你组合效果和逻辑片段时,你必须注意每个片段应该返回下一个的输入。

示例

example 文件夹中提供了几个可能的使用和功能示例。

运行示例:

php example/ArgvEcho.php

或者,如果你使用 Docker 获取 PHP 7.1 环境,你可以使用

docker run --rm -ti -v "$(pwd):/app" --workdir /app php:7.1-cli php example/ArgvEcho.php

Http.phpSerializeEffect.php 中的示例是 Web 应用程序,因此您需要一个 Web 服务器来尝试它们。最简单的方法是使用内置的 PHP Web 服务器

php -S localhost:8000 example/Http.php

或者,如果你使用 Docker,

docker run --rm -ti -p 8000:8000 -v "$(pwd):/app" php:7.1-cli php -S 0.0.0.0:8000 /app/example/Http.php

然后导航到 localhost:8000 以查看其工作。