本文目录导读:

是的,PHP 职责链模式(Chain of Responsibility Pattern)的核心目的就是沿着一条链传递请求,直到有某个处理器处理该请求为止。
下面从几个关键点帮你理清它的工作原理和 PHP 实现方式:
核心概念
职责链模式将多个处理者(Handler)连接成一条链,请求沿着这条链依次传递:
- 每个处理者:决定是否处理请求,或者将其传给下一个处理者
- 请求最终:要么被某个处理者处理,要么到达链的末尾仍未被处理
简单 PHP 示例(基础版)
<?php
// 抽象处理者
abstract class Handler
{
protected ?Handler $next = null;
public function setNext(Handler $handler): Handler
{
$this->next = $handler;
return $handler; // 支持链式调用
}
abstract public function handle(string $request): ?string;
}
// 具体处理者 A
class ConcreteHandlerA extends Handler
{
public function handle(string $request): ?string
{
if ($request === 'A') {
return "Handler A 处理了请求: $request";
}
return $this->next?->handle($request); // 传递
}
}
// 具体处理者 B
class ConcreteHandlerB extends Handler
{
public function handle(string $request): ?string
{
if ($request === 'B') {
return "Handler B 处理了请求: $request";
}
return $this->next?->handle($request);
}
}
// 使用
$handlerA = new ConcreteHandlerA();
$handlerB = new ConcreteHandlerB();
$handlerA->setNext($handlerB);
echo $handlerA->handle('A'); // Handler A 处理了请求: A
echo $handlerA->handle('B'); // Handler B 处理了请求: B
echo $handlerA->handle('C'); // null (没人处理)
常见应用场景
- 框架中间件(如 Laravel 的 Middleware):请求经过认证 → 日志 → CSRF 保护...
- 日志系统:不同级别日志(DEBUG → INFO → ERROR)由不同处理器处理
- 权限校验:多个校验器依次检查用户权限
- 表单验证:多个验证规则链式执行
现代 PHP 实现(Laravel Middleware 风格)
<?php
// 使用闭包实现更灵活的链
class Pipeline
{
private array $pipes = [];
public function through(array $pipes): self
{
$this->pipes = $pipes;
return $this;
}
public function process($passable, callable $destination)
{
$pipeline = array_reduce(
array_reverse($this->pipes),
function ($next, $pipe) {
return function ($passable) use ($next, $pipe) {
return $pipe->handle($passable, $next);
};
},
$destination
);
return $pipeline($passable);
}
}
// 使用
$pipeline = new Pipeline();
$result = $pipeline
->through([new TrimMiddleware(), new UppercaseMiddleware()])
->process(" hello world ", function ($input) {
return $input;
});
// 结果: " HELLO WORLD "
关键特性
| 特性 | 说明 |
|---|---|
| 解耦 | 请求发送者不需要知道谁处理请求 |
| 灵活 | 可以动态增删处理者,调整链顺序 |
| 单一职责 | 每个处理者只负责自己的逻辑 |
| 可中断 | 处理者可以选择终止传递 |
是的,职责链模式的本质就是传递请求,让多个对象都有机会处理同一个请求,直到有对象处理它为止,PHP 中既可以手动实现链表结构,也可以利用闭包实现更优雅的 Pipeline 模式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播