当前位置:首页 > PHP

php实现pipeline

2026-02-28 06:27:18PHP

PHP 实现 Pipeline 模式

Pipeline(管道)模式是一种将任务分解为多个步骤的设计模式,每个步骤处理输入并传递给下一个步骤。在 PHP 中可以通过闭包、生成器或类实现。

使用闭包实现 Pipeline

通过闭包链式调用实现 Pipeline,每个闭包处理数据并传递给下一个闭包:

php实现pipeline

function pipeline(array $stages): callable
{
    return function ($payload) use ($stages) {
        return array_reduce(
            $stages,
            function ($carry, $stage) {
                return $stage($carry);
            },
            $payload
        );
    };
}

// 示例使用
$process = pipeline([
    function ($input) { return $input * 2; },
    function ($input) { return $input + 10; },
    function ($input) { return $input / 3; }
]);

echo $process(5); // 输出 6.666...

使用生成器实现 Pipeline

生成器可以按需处理数据流,适合大数据量场景:

function generatorPipeline(array $stages): Generator
{
    $value = yield;
    foreach ($stages as $stage) {
        $value = $stage($value);
        yield $value;
    }
}

// 示例使用
$pipeline = generatorPipeline([
    function ($x) { return $x + 1; },
    function ($x) { return $x * 2; }
]);

$pipeline->send(5);
echo $pipeline->current(); // 输出 12

面向对象实现 Pipeline

通过类封装 Pipeline 逻辑,提供更好的可扩展性:

php实现pipeline

class Pipeline
{
    private $stages = [];

    public function addStage(callable $stage): self
    {
        $this->stages[] = $stage;
        return $this;
    }

    public function process($payload)
    {
        foreach ($this->stages as $stage) {
            $payload = $stage($payload);
        }
        return $payload;
    }
}

// 示例使用
$pipeline = (new Pipeline())
    ->addStage(function ($x) { return $x * 3; })
    ->addStage(function ($x) { return $x - 1; });

echo $pipeline->process(5); // 输出 14

中间件风格的 Pipeline

适合 Web 中间件场景的实现方式:

class MiddlewarePipeline
{
    private $middlewares = [];
    private $index = 0;

    public function addMiddleware(callable $middleware): void
    {
        $this->middlewares[] = $middleware;
    }

    public function handle($request, $next)
    {
        if (!isset($this->middlewares[$this->index])) {
            return $next($request);
        }

        $middleware = $this->middlewares[$this->index];
        $this->index++;

        return $middleware($request, function ($request) use ($next) {
            return $this->handle($request, $next);
        });
    }
}

// 示例使用
$pipeline = new MiddlewarePipeline();
$pipeline->addMiddleware(function ($req, $next) {
    $req .= " middleware1";
    return $next($req);
});
$pipeline->addMiddleware(function ($req, $next) {
    $req .= " middleware2";
    return $next($req);
});

$result = $pipeline->handle("request", function ($req) {
    return $req . " final";
});

echo $result; // 输出 "request middleware1 middleware2 final"

Laravel 风格的 Pipeline

Laravel 框架提供了 Pipeline 实现,可以单独使用:

use Illuminate\Pipeline\Pipeline;

$pipeline = new Pipeline();

$result = $pipeline->send('data')
    ->through([
        function ($passable, $next) {
            return $next($passable . '-processed1');
        },
        function ($passable, $next) {
            return $next($passable . '-processed2');
        }
    ])
    ->then(function ($passable) {
        return $passable . '-final';
    });

echo $result; // 输出 "data-processed1-processed2-final"

每种实现方式适用于不同场景,闭包方式适合简单数据处理,生成器适合流式处理,面向对象方式提供更好扩展性,中间件风格适合请求处理流程。

标签: phppipeline
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…