当前位置:首页 > PHP

php实现pipeline

2026-04-03 15:33:36PHP

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

实际应用场景

  1. HTTP 请求处理:Laravel 的中间件系统就是 Pipeline 模式的典型实现
  2. 数据处理流水线:对数据进行一系列转换操作
  3. 任务处理链:将复杂任务分解为多个小步骤

高级用法

可以通过接口抽象步骤,使每个步骤成为独立类:

php实现pipeline

interface PipelineStep
{
    public function handle($payload, $next);
}

class MultiplyStep implements PipelineStep
{
    public function handle($payload, $next)
    {
        $payload *= 2;
        return $next($payload);
    }
}

这种实现方式更适合大型项目,每个步骤可以单独测试和维护。

标签: phppipeline
分享给朋友:

相关文章

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

php 路由实现的

php 路由实现的

PHP 路由实现方法 基于原生 PHP 实现路由 创建一个简单的路由解析器,通过解析 URL 路径来调用对应的控制器或函数。 // 定义路由表 $routes = [ '/' => '…

php array实现

php array实现

PHP 数组实现 PHP 数组是一种灵活的数据结构,可以存储多个值。以下是几种常见的实现方式: 索引数组 索引数组使用数字作为键名,默认从0开始递增。 $fruits = array("Apple…