当前位置:首页 > PHP

php 管道实现

2026-02-14 11:42:07PHP

PHP 管道模式实现

管道模式(Pipeline Pattern)是一种将任务分解为多个步骤的设计模式,每个步骤由独立的处理单元完成,数据通过管道依次传递。以下是 PHP 中实现管道模式的几种方法:

使用闭包和数组迭代

通过闭包和 array_reduce 实现管道串联:

$pipeline = array_reduce(
    [
        function ($input) { return $input * 2; },
        function ($input) { return $input + 10; },
        function ($input) { return $input / 3; }
    ],
    function ($carry, $callback) {
        return $callback($carry);
    },
    $initialInput = 5
);

echo $pipeline; // 输出: (5*2+10)/3 = 6.666...

面向对象的管道类

封装管道操作为独立类,支持动态添加处理阶段:

class Pipeline
{
    private $stages = [];

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

    public function process($payload)
    {
        return array_reduce(
            $this->stages,
            function ($carry, $stage) {
                return $stage($carry);
            },
            $payload
        );
    }
}

// 使用示例
$result = (new Pipeline())
    ->add(function ($x) { return $x * 2; })
    ->add(function ($x) { return $x + 1; })
    ->process(5); // 输出: 11

Laravel 风格的管道实现

参考 Laravel 的管道设计,支持方法链和异常处理:

class LaravelPipeline
{
    protected $passable;
    protected $pipes = [];

    public function send($passable): self
    {
        $this->passable = $passable;
        return $this;
    }

    public function through(array $pipes): self
    {
        $this->pipes = $pipes;
        return $this;
    }

    public function then(callable $destination)
    {
        $pipeline = array_reduce(
            array_reverse($this->pipes),
            $this->carry(),
            function ($passable) use ($destination) {
                return $destination($passable);
            }
        );
        return $pipeline($this->passable);
    }

    protected function carry(): callable
    {
        return function ($stack, $pipe) {
            return function ($passable) use ($stack, $pipe) {
                return $pipe($passable, $stack);
            };
        };
    }
}

// 使用示例
$result = (new LaravelPipeline())
    ->send(10)
    ->through([
        function ($x, $next) { return $next($x + 5); },
        function ($x, $next) { return $next($x * 2); }
    ])
    ->then(function ($x) { return $x; }); // 输出: 30

中间件模式扩展

适用于 HTTP 中间件场景的变体实现:

interface Middleware
{
    public function handle($request, callable $next);
}

class PipelineWithMiddleware
{
    private $middlewares = [];

    public function pipe(Middleware $middleware): self
    {
        $this->middlewares[] = $middleware;
        return $this;
    }

    public function run($request)
    {
        $handler = array_reduce(
            array_reverse($this->middlewares),
            function ($next, $middleware) {
                return function ($request) use ($middleware, $next) {
                    return $middleware->handle($request, $next);
                };
            },
            function ($request) { return $request; }
        );
        return $handler($request);
    }
}

关键实现要点

  • 可组合性:每个处理阶段应为独立的可调用单元
  • 类型安全:建议使用接口约束管道阶段(如 Middleware
  • 异常处理:可在管道类中添加 try-catch 逻辑统一处理错误
  • 性能优化:对于大型管道,可考虑生成静态调用栈减少动态调用开销

实际应用中可根据需求选择简单闭包组合或完整的面向对象实现。

php 管道实现

标签: 管道php
分享给朋友:

相关文章

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'loca…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现定时

php实现定时

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

php实现https

php实现https

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

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conte…