marcosh / effector
Requires
- php: ^7.1
- zendframework/zend-diactoros: ^1.3
Requires (Dev)
- giorgiosironi/eris: ^0.9
- mockery/mockery: ^0.9.9
- mvlabs/coding-standard: dev-master
- opis/closure: ^3.0
- php-mock/php-mock-mockery: ^1.1
- phpunit/phpunit: ^6.0
Suggests
- opis/closure: Allows to serialize effects
This package is auto-updated.
Last update: 2021-11-16 15:30:29 UTC
README
一个用于编写感知效果的 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.php
和 SerializeEffect.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 以查看其工作。