php实现pipeline
PHP 实现 Pipeline 模式
Pipeline 模式是一种将任务分解为多个步骤并按顺序执行的设计模式。每个步骤处理输入并传递给下一个步骤,适合处理数据流或任务链。

基础实现
创建一个基础的 Pipeline 类,包含添加步骤和执行方法:

class Pipeline
{
protected $steps = [];
public function addStep(callable $step)
{
$this->steps[] = $step;
return $this;
}
public function execute($payload)
{
foreach ($this->steps as $step) {
$payload = $step($payload);
}
return $payload;
}
}
使用示例
$pipeline = new Pipeline();
$pipeline->addStep(function ($data) {
return $data * 2;
})->addStep(function ($data) {
return $data + 10;
});
$result = $pipeline->execute(5); // 输出 20
中间件风格实现
更灵活的中间件风格实现,允许在每个步骤中控制流程:
class MiddlewarePipeline
{
protected $middlewares = [];
public function addMiddleware(callable $middleware)
{
$this->middlewares[] = $middleware;
return $this;
}
public function handle($request, $next)
{
$stack = array_reduce(
array_reverse($this->middlewares),
function ($next, $middleware) {
return function ($request) use ($middleware, $next) {
return $middleware($request, $next);
};
},
$next
);
return $stack($request);
}
}
使用中间件示例
$pipeline = new MiddlewarePipeline();
$pipeline->addMiddleware(function ($request, $next) {
$request .= '-processed1';
$response = $next($request);
return $response . '-after1';
})->addMiddleware(function ($request, $next) {
$request .= '-processed2';
$response = $next($request);
return $response . '-after2';
});
$result = $pipeline->handle('start', function ($request) {
return $request . '-final';
});
// 输出: start-processed1-processed2-final-after2-after1
实际应用场景
- HTTP 请求处理:Laravel 的中间件系统就是 Pipeline 模式的典型实现
- 数据处理流水线:对数据进行一系列转换操作
- 任务处理链:将复杂任务分解为多个小步骤
高级用法
可以通过接口抽象步骤,使每个步骤成为独立类:
interface PipelineStep
{
public function handle($payload, $next);
}
class MultiplyStep implements PipelineStep
{
public function handle($payload, $next)
{
$payload *= 2;
return $next($payload);
}
}
这种实现方式更适合大型项目,每个步骤可以单独测试和维护。






