php的pipe实现

dev-master 2021-08-10 22:24 UTC

This package is auto-updated.

Last update: 2024-09-11 05:05:58 UTC


README

arashrasoulzadeh

php中简单实现pipeline,您可以使用此库将一系列函数和/或类执行顺序地“管道化”,piped还支持从pipeline中跳出和撤销。

安装

使用以下命令将Piped添加到您的项目中:

composer require arashrasoulzadeh/piped

定义

  • Pipe:一个执行序列类(扩展arashrasoulzadeh\piped\Abstracts\Pipe并重写command方法)

扩展

您应该创建一个新的Pipe类,该类扩展arashrasoulzadeh\piped\Abstracts\Pipe并重写command方法。您可以覆盖一些参数:

  • rollback:在发生错误时启用撤销pipe。

  • throw_error:启用此选项以抛出错误而不是执行pipe的其余部分。

  • custom_args:传递给pipe数组的第二个输入的参数,请参阅用法以获取更多信息。

用法

声明新的pipe(或您也可以使用Piped pipe)后,您可以使用以下代码片段来调用Pipeline:

use arashrasoulzadeh\piped\Piped;
use arashrasoulzadeh\piped\Pipes\SumAllPipe;

$pipe =  Piped::build()->pipe(1,2,3,4)->through(
	SumAllPipe::class,
);

echo $pipe->output(); // 10

您还可以向pipe传递自定义参数(可以在pipe中的custom_args数组中访问):

use arashrasoulzadeh\piped\Piped;
use arashrasoulzadeh\piped\Pipes\ConcatAllPipe;

$pipe =  Piped::build()->pipe(1,2,3,4)->through(
	[ ConcatAllPipe::class,'-' ],
);

echo $pipe->output(); // 1-2-3-4

您可以在through方法中提供无限数量的pipe,例如:

use arashrasoulzadeh\piped\Piped;
use arashrasoulzadeh\piped\Pipes\ConcatAllPipe;

$pipe =  Piped::build()->pipe(1,2,3,4)->through(
	[ NotNullPipe::class , '*' ],
	[ ConcatAllPipe::class,'-' ]
);

echo $pipe->output(); // 1-2-3-4

您还可以管道化一个匿名函数。

use arashrasoulzadeh\piped\Piped;
use arashrasoulzadeh\piped\Pipes\MapPipe;

$pipe =  Piped::build()->pipe(1,2,3,4)->through(
	 [MapPipe::class,function ($item,$index) { return $item+1; }] ,
);

echo $pipe->output(); // 2,3,4,5

可用pipe

该库中包含一些预构建的pipe。

  • ConcatAllPipe:使用提供的自定义参数(默认为空格)将所有输入连接在一起。

  • SumAllPipe:对所有输入数字求和(如果您不想在数组项不是数字时断开pipe,可以将false作为第一个自定义参数发送)。

  • NotNullPipe:检查所有/一些/第一个输入项是否为null,如果是,则断开pipeline。您可以提供*以检查所有项,或提供索引数组以进行检查(默认为第一个索引)。

  • MapPipe:将匿名函数映射到最后一个输出(如果为数组则针对每个项)。