当前位置:首页 > PHP

php实现pipeline

2026-04-03 15:33:36PHP

PHP 实现 Pipeline 模式

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

php实现pipeline

基础实现

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

php实现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. 任务处理链:将复杂任务分解为多个小步骤

高级用法

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

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 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节点。每个…

php 伪静态实现

php 伪静态实现

PHP 伪静态实现方法 伪静态(URL Rewrite)是一种通过服务器配置将动态URL转换为静态URL的技术,提升URL的可读性和SEO效果。以下是几种常见的实现方式: 使用Apache的mod_…

php redis 队列实现

php redis 队列实现

PHP Redis 队列实现 Redis 是一个高性能的键值存储系统,常被用作消息队列。以下是使用 PHP 和 Redis 实现队列的几种方法。 安装依赖 确保已安装 PHP Redis 扩展。可以…